diff --git a/Data/Decoration/Chests.cfg b/Data/Decoration/Chests.cfg index 41e28b9..883eee8 100644 --- a/Data/Decoration/Chests.cfg +++ b/Data/Decoration/Chests.cfg @@ -1279,3 +1279,333 @@ lootbox3 3650 (Hue=0; Name=wooden chest) lootcrate3 1605 (Hue=0; Name=crate) 288 1124 22 +lootcrate3 1605 (Hue=0; Name=crate) +916 71 10 + +lootbox2 1517 (Hue=2413; Name=wooden chest) +808 67 0 + +lootcrate1 3645 (Hue=0; Name=crate) +601 116 -10 + +lootchest1 3708 (Hue=0; Name=metal chest) +560 134 10 + +lootbox1 1325 (Hue=2413; Name=wooden chest) +544 138 20 + +lootbox1 1325 (Hue=2413; Name=wooden chest) +544 109 20 + +lootcrate1 3647 (Hue=0; Name=crate) +566 90 30 + +lootcrate2 3644 (Hue=0; Name=crate) +870 64 0 + +lootchest1 2475 (Hue=0; Name=metal chest) +651 96 20 + +lootchest2 3669 (Hue=0; Name=metal chest) +627 144 34 + +lootcrate1 3646 (Hue=0; Name=crate) +578 154 0 + +lootcrate1 3647 (Hue=0; Name=crate) +577 155 0 + +lootcrate1 3646 (Hue=0; Name=crate) +594 148 20 + +lootcrate1 3645 (Hue=0; Name=crate) +560 106 -21 + +lootcrate1 3646 (Hue=0; Name=crate) +580 89 10 + +lootcrate1 3645 (Hue=0; Name=crate) +578 92 10 + +lootcrate1 3646 (Hue=0; Name=crate) +602 117 -10 + +lootbox4 1153 (Hue=0; Name=wooden chest) +600 83 -11 + +lootcrate1 3646 (Hue=0; Name=crate) +544 61 30 + +lootchest1 3708 (Hue=0; Name=metal chest) +544 60 30 + +lootbox1 1325 (Hue=2413; Name=wooden chest) +568 69 20 + +lootcrate1 3645 (Hue=0; Name=crate) +566 89 30 + +lootcrate2 3644 (Hue=0; Name=crate) +904 56 9 + +lootcrate1 3646 (Hue=0; Name=crate) +906 73 10 + +lootchest2 3669 (Hue=0; Name=metal chest) +906 77 10 + +lootchest2 3669 (Hue=0; Name=metal chest) +869 80 0 + +lootcrate2 3644 (Hue=0; Name=crate) +816 110 1 + +lootchest4 3666 (Hue=0; Name=metal chest) +822 93 0 + +lootcrate1 3646 (Hue=0; Name=crate) +816 109 1 + +lootchest2 3668 (Hue=0; Name=metal chest) +825 122 0 + +lootchest2 3668 (Hue=0; Name=metal chest) +871 114 0 + +lootbox2 1517 (Hue=2413; Name=wooden chest) +917 88 5 + +lootcrate4 3737 (Hue=0; Name=crate) +867 164 3 + +lootchest3 3648 (Hue=0; Name=metal chest) +846 162 3 + +lootchest4 3666 (Hue=0; Name=metal chest) +820 157 0 + +lootcrate4 3737 (Hue=0; Name=crate) +818 138 0 + +lootbox3 3651 (Hue=0; Name=wooden chest) +857 130 0 + +lootbox3 3651 (Hue=0; Name=wooden chest) +842 140 3 + +lootcrate3 1605 (Hue=0; Name=crate) +635 300 20 + +lootchest3 3649 (Hue=0; Name=metal chest) +671 288 10 + +lootbox3 3650 (Hue=0; Name=wooden chest) +681 308 10 + +lootbox3 3651 (Hue=0; Name=wooden chest) +704 296 -5 + +lootcrate3 1605 (Hue=0; Name=crate) +688 340 0 + +lootcrate2 3644 (Hue=0; Name=crate) +688 339 0 + +lootchest3 3648 (Hue=0; Name=metal chest) +681 384 0 + +lootbox4 1153 (Hue=0; Name=wooden chest) +708 374 0 + +lootcrate4 3737 (Hue=0; Name=crate) +646 392 0 + +lootcrate3 1605 (Hue=0; Name=crate) +648 381 0 + +lootcrate2 3644 (Hue=0; Name=crate) +647 382 0 + +lootcrate3 1605 (Hue=0; Name=crate) +646 382 0 + +lootchest3 3648 (Hue=0; Name=metal chest) +659 355 0 + +lootcrate3 3647 (Hue=0; Name=crate) +670 353 6 + +lootcrate3 3647 (Hue=0; Name=crate) +672 355 22 + +lootcrate3 3647 (Hue=0; Name=crate) +661 351 22 + +lootchest3 3648 (Hue=0; Name=metal chest) +664 349 22 + +lootbox4 1160 (Hue=0; Name=wooden chest) +671 337 0 + +lootchest4 3667 (Hue=0; Name=metal chest) +674 337 0 + +lootchest3 3648 (Hue=0; Name=metal chest) +575 397 0 + +lootbox3 3651 (Hue=0; Name=wooden chest) +578 393 0 + +lootbox4 1153 (Hue=0; Name=wooden chest) +531 385 10 + +lootcrate3 1605 (Hue=0; Name=crate) +510 394 10 + +lootbox3 3650 (Hue=0; Name=wooden chest) +489 388 10 + +lootcrate3 1605 (Hue=0; Name=crate) +473 392 10 + +lootchest4 3666 (Hue=0; Name=metal chest) +472 299 19 + +lootchest4 3666 (Hue=0; Name=metal chest) +491 347 -1 + +lootcrate3 1605 (Hue=0; Name=crate) +489 342 0 + +lootcrate2 3644 (Hue=0; Name=crate) +489 343 0 + +lootcrate2 3644 (Hue=0; Name=crate) +490 344 0 + +lootcrate3 1605 (Hue=0; Name=crate) +1067 338 0 + +lootcrate3 1605 (Hue=0; Name=crate) +1061 372 0 + +lootchest4 3666 (Hue=0; Name=metal chest) +1074 387 10 + +lootbox3 3650 (Hue=0; Name=wooden chest) +1067 393 10 + +lootbox3 3651 (Hue=0; Name=wooden chest) +1031 385 10 + +lootbox3 3650 (Hue=0; Name=wooden chest) +1017 358 0 + +lootcrate3 1605 (Hue=0; Name=crate) +1014 359 0 + +lootbox2 1517 (Hue=2413; Name=wooden chest) +1022 363 0 + +lootcrate4 3737 (Hue=0; Name=crate) +984 389 0 + +lootcrate3 1605 (Hue=0; Name=crate) +968 387 0 + +lootchest3 3648 (Hue=0; Name=metal chest) +948 370 0 + +lootchest3 3648 (Hue=0; Name=metal chest) +947 378 0 + +lootchest3 3649 (Hue=0; Name=metal chest) +959 313 0 + +lootcrate3 1605 (Hue=0; Name=crate) +994 314 0 + +lootcrate2 3644 (Hue=0; Name=crate) +994 315 0 + +lootcrate3 1605 (Hue=0; Name=crate) +984 326 0 + +lootcrate3 1605 (Hue=0; Name=crate) +1006 288 1 + +lootbox2 1517 (Hue=2413; Name=wooden chest) +1010 288 0 + +lootbox4 1153 (Hue=0; Name=wooden chest) +902 289 10 + +lootcrate4 3737 (Hue=0; Name=crate) +899 301 10 + +lootchest4 3666 (Hue=0; Name=metal chest) +898 294 10 + +lootbox3 3650 (Hue=0; Name=wooden chest) +857 311 0 + +lootchest3 3648 (Hue=0; Name=metal chest) +860 289 -10 + +lootcrate3 1605 (Hue=0; Name=crate) +873 294 -10 + +lootchest3 3649 (Hue=0; Name=metal chest) +933 368 0 + +lootbox2 1517 (Hue=2413; Name=wooden chest) +932 368 0 + +lootchest4 3666 (Hue=0; Name=metal chest) +923 355 0 + +lootbox3 3650 (Hue=0; Name=wooden chest) +897 365 0 + +lootcrate3 1605 (Hue=0; Name=crate) +897 362 0 + +lootcrate3 1605 (Hue=0; Name=crate) +896 341 0 + +lootcrate3 1605 (Hue=0; Name=crate) +913 336 0 + +lootcrate2 3644 (Hue=0; Name=crate) +918 342 0 + +lootcrate2 3644 (Hue=0; Name=crate) +900 336 0 + +lootcrate4 3737 (Hue=0; Name=crate) +940 332 0 + +lootcrate3 1605 (Hue=0; Name=crate) +866 359 0 + +lootcrate2 3644 (Hue=0; Name=crate) +867 359 0 + +lootchest3 3648 (Hue=0; Name=metal chest) +841 380 10 + +lootchest4 3666 (Hue=0; Name=metal chest) +862 395 10 + +lootcrate3 1605 (Hue=0; Name=crate) +862 397 10 + +lootcrate3 1605 (Hue=0; Name=crate) +872 391 1 + +lootbox2 1517 (Hue=2413; Name=wooden chest) +879 398 0 + +lootbox2 1517 (Hue=2413; Name=wooden chest) +880 398 0 + diff --git a/Data/Decoration/Underworld/Shame.cfg b/Data/Decoration/Underworld/Shame.cfg index 0660f01..ca3d892 100644 --- a/Data/Decoration/Underworld/Shame.cfg +++ b/Data/Decoration/Underworld/Shame.cfg @@ -1,5 +1,80 @@ BookOfLore 3735 867 372 5 -ChestOfSecrets 2129 +ChestOfSecrets 2192 937 328 5 + +MetalDoor 1653 (Facing=WestCW) +628 335 0 + +MetalDoor 1655 (Facing=EastCCW) +605 330 0 + +MetalDoor 1653 (Facing=WestCW) +595 334 0 + +MetalDoor 1655 (Facing=EastCCW) +596 334 0 + +MetalDoor 1661 (Facing=SouthCW) +592 331 0 + +MetalDoor 1663 (Facing=NorthCCW) +592 330 0 + +MetalDoor 1653 (Facing=WestCCW) +594 319 0 + +MetalDoor 1653 (Facing=WestCW) +523 342 0 + +MetalDoor 1661 (Facing=SouthCW) +529 346 0 + +MetalDoor 1663 (Facing=NorthCW) +529 345 22 + +MetalDoor 1653 (Facing=WestCCW) +522 342 22 + +MetalDoor 1663 (Facing=NorthCW) +528 339 22 + +MetalDoor 1653 (Facing=WestCCW) +533 335 22 + +MetalDoor 1661 (Facing=SouthCW) +531 332 0 + +MetalDoor 1663 (Facing=NorthCCW) +530 331 22 + +MetalDoor 1653 (Facing=WestCW) +658 350 0 + +MetalDoor 1661 (Facing=SouthCW) +666 354 0 + +MetalDoor 1661 (Facing=SouthCCW) +667 354 22 + +MetalDoor 1653 (Facing=WestCCW) +659 350 22 + +MetalDoor 1663 (Facing=NorthCCW) +663 347 22 + +MetalDoor 1653 (Facing=WestCCW) +669 343 22 + +MetalDoor 1663 (Facing=NorthCW) +665 340 22 + +MetalDoor 1663 (Facing=NorthCCW) +667 339 0 + +MetalDoor 1661 (Facing=SouthCCW) +1023 331 0 + +MetalDoor 1663 (Facing=NorthCW) +1023 330 0 diff --git a/Data/Spawns/dungeons.map b/Data/Spawns/dungeons.map index 5c82c9a..0b5e7e3 100644 --- a/Data/Spawns/dungeons.map +++ b/Data/Spawns/dungeons.map @@ -207,6 +207,7 @@ *|waterelemental||||||830|137|0|2|5|10|-1|4|1|1|0|0|0|0|0 *|seaserpent||||||813|127|-5|2|5|10|-1|8|1|1|0|0|0|0|0 *|waterelemental||||||853|133|0|2|5|10|-1|4|1|1|0|0|0|0|0 +*|mudelemental||||||904|66|10|2|5|10|4|4|1|1|0|0|0|0|0 ## SHAME LEVEL 3 *|fireelemental||||||613|292|20|2|5|10|-1|4|1|1|0|0|0|0|0 *|airelemental||||||619|307|20|2|5|10|-1|4|1|1|0|0|0|0|0 @@ -265,6 +266,43 @@ *|airelemental||||||554|290|20|2|5|10|-1|4|1|1|0|0|0|0|0 *|earthelemental||||||568|291|20|2|5|10|-1|4|1|1|0|0|0|0|0 ## SHAME LEVEL 4 +*|fireelemental:airelemental:waterelemental||||||1075|316|-10|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental||||||1068|339|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental||||||1064|372|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|acidelemental:poisonelemental:fireelemental||||||1066|390|10|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||1047|388|10|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||1018|394|10|2|5|10|4|4|1|1|0|0|0|0|0 +*|eldergazer||||||1017|361|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||991|395|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||971|386|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||953|374|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|bloodelementalelder||||||959|338|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||971|318|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||984|303|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|waterelemental||||||1002|316|0|2|5|10|6|6|1|2|0|0|0|0|0 +*|fireelemental||||||1009|291|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:waterelemental:airelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||1027|307|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|evilmage||||||1037|330|0|2|5|10|7|7|1|2|0|0|0|0|0 +*|evilmagelord||||||1020|331|22|2|5|10|0|0|1|1|0|0|0|0|0 +*|earthelemental:mudelemental||||||1058|319|0|2|5|10|6|6|1|2|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||928|292|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||902|293|10|2|5|10|7|7|1|2|0|0|0|0|0 +*|waterelementalelder||||||912|316|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||891|314|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||875|310|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||863|292|-10|2|5|10|8|8|1|2|0|0|0|0|0 +*|poisonelemental||||||859|332|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||852|362|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|waterelementalelder||||||872|372|0|2|5|10|4|4|1|2|0|0|0|0|0 +*|poisonelementalelder||||||858|395|10|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||883|393|0|2|5|10|8|8|1|2|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||907|388|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|fireelemental:bloodelemental:lightningelemental:magmaelemental:meteorelemental||||||931|393|0|2|5|10|4|4|1|1|0|0|0|0|0 +*|deepseaserpent||||||928|343|-5|2|5|10|3|3|1|1|0|0|0|0|0 +*|deepseaserpent||||||899|351|-5|2|5|10|4|4|1|1|0|0|0|0|0 +*|kraken||||||911|351|-5|2|5|10|4|4|1|1|0|0|0|0|0 +*|deepseaserpent||||||999|363|-5|2|5|10|4|4|1|1|0|0|0|0|0 +*|kraken||||||1008|336|-5|2|5|10|4|4|1|1|0|0|0|0|0 ## Despise Level 1 *|lizardman||||||585|1107|61|2|5|10|-1|10|1|2|0|0|0|0|0 *|lizardman||||||500|1112|62|2|5|10|-1|10|1|2|0|0|0|0|0 diff --git a/Scripts/Commands/Admin/BuildWorld.cs b/Scripts/Commands/Admin/BuildWorld.cs index c2abff1..e4de6fc 100644 --- a/Scripts/Commands/Admin/BuildWorld.cs +++ b/Scripts/Commands/Admin/BuildWorld.cs @@ -1,45 +1,111 @@ -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.Misc.GenTeleporters.GenTeleporters_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" ); - Server.SpawnGenerator.Parse( e.Mobile, "danger.map" ); - Server.SpawnGenerator.Parse( e.Mobile, "forts.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." ); - } - } -} +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; +using System.Reflection; // Added to access private variables inside BaseSpawner + +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 ) + { + // ------- SURGICAL SPAWN SWEEP START ------- + e.Mobile.SendMessage( 38, "Sweeping the world for old spawners and orphaned tracking mobs... This may take a moment." ); + + int spawnerCount = 0; + int mobCount = 0; + + List spawnersToDelete = new List(); + List mobsToDelete = new List(); + + foreach ( Item item in World.Items.Values ) + { + // 1. Catch standard spawners + if ( item is Spawner ) + { + spawnersToDelete.Add( item ); + } + // 2. Catch custom BaseSpawners (SpawnAnimals, SpawnBirds, Spawn_A, etc.) + else if ( item is BaseSpawner ) + { + spawnersToDelete.Add( item ); + + // Use Reflection to grab the private "m_TrackedMobile" field + FieldInfo field = typeof(BaseSpawner).GetField( "m_TrackedMobile", BindingFlags.NonPublic | BindingFlags.Instance ); + if ( field != null ) + { + Mobile trackedMob = field.GetValue( item ) as Mobile; + + // If the spawner is tracking a living mob, mark it for deletion + if ( trackedMob != null && !trackedMob.Deleted ) + { + mobsToDelete.Add( trackedMob ); + } + } + } + } + + // Delete the thousands of orphaned animals/mobs first + foreach ( Mobile m in mobsToDelete ) + { + if ( !m.Deleted ) + { + m.Delete(); + mobCount++; + } + } + + // Delete the hidden proxy spawners second + foreach ( Item item in spawnersToDelete ) + { + if ( !item.Deleted ) + { + item.Delete(); + spawnerCount++; + } + } + + e.Mobile.SendMessage( 63, "Wipe Complete: {0} spawners and {1} tracked mobs deleted! Rebuilding...", spawnerCount, mobCount ); + // ------- SURGICAL SPAWN SWEEP END ------- + + + // Original Generation Commands + Server.Commands.Decorate.Decorate_OnCommand( e ); + Server.Misc.GenTeleporters.GenTeleporters_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" ); + Server.SpawnGenerator.Parse( e.Mobile, "danger.map" ); + Server.SpawnGenerator.Parse( e.Mobile, "forts.map" ); + + if ( Server.Misc.Settings.PopulateTowns() ) + { + Server.SpawnGenerator.Parse( e.Mobile, "citizens.map" ); + } + + Server.Regions.SpawnEntry.RespawnAllRegions_OnCommand( e ); + + e.Mobile.SendMessage( 63, "The world has been rebuilt." ); + } + } +}