diff --git a/Data/Config/Regions.xml b/Data/Config/Regions.xml
index 1291e91..b2feef8 100644
--- a/Data/Config/Regions.xml
+++ b/Data/Config/Regions.xml
@@ -159,6 +159,9 @@
+
+
+
diff --git a/Data/Spawns/camps.map b/Data/Spawns/camps.map
deleted file mode 100644
index da9c9ab..0000000
--- a/Data/Spawns/camps.map
+++ /dev/null
@@ -1,2 +0,0 @@
-*|brigandcamp||||||821|225|10|1|5|10|-1|4|1|1|0|0|0|0|0
-*|orccamp||||||821|360|3|1|5|10|-1|4|1|1|0|0|0|0|0
diff --git a/Data/Spawns/chests.map b/Data/Spawns/chests.map
index 36efc45..743b3a7 100644
--- a/Data/Spawns/chests.map
+++ b/Data/Spawns/chests.map
@@ -1,3 +1,10 @@
+## Overworld
+# Hallow Keep
+*|treasurechestlevel1||||||903|112|34|1|5|10|-1|0|1|1|0|0|0|0|0
+*|treasurechestlevel1||||||899|112|34|1|5|10|-1|0|1|1|0|0|0|0|0
+*|treasurechestlevel1||||||909|119|14|1|5|10|-1|0|1|1|0|0|0|0|0
+*|treasurechestlevel1||||||891|116|14|1|5|10|-1|0|1|1|0|0|0|0|0
+##
## Whispering Depths
# Level 1
*|treasurechestlevel1||||||2812|85|0|1|1|1|-1|1|1|1|0|0|0|0|0
@@ -135,3 +142,4 @@
*|treasurechestlevel3:treasurechestlevel4||||||3077|436|0|1|1|1|-1|0|1|1|0|0|0|0|0
*|treasurechestlevel2:treasurechestlevel3||||||3097|414|0|1|1|1|-1|0|1|1|0|0|0|0|0
*|treasurechestlevel2:treasurechestlevel3||||||3085|376|0|1|1|1|-1|0|1|1|0|0|0|0|0
+#Next Dungeon
diff --git a/Data/Spawns/danger.map b/Data/Spawns/danger.map
new file mode 100644
index 0000000..4f1de7d
--- /dev/null
+++ b/Data/Spawns/danger.map
@@ -0,0 +1,19 @@
+## Camps
+*|brigandcamp||||||821|225|10|1|5|10|-1|0|1|1|0|0|0|0|0
+*|orccamp||||||821|360|3|1|5|10|-1|0|1|1|0|0|0|0|0
+## Hallow Keep
+*|zombie:skeleton||||||898|115|34|1|5|10|-1|0|1|2|0|0|0|0|0
+*|evilmage||||||892|119|34|1|5|10|-1|0|1|1|0|0|0|0|0
+*|spectre:wraith:zombie:skeleton:ghoul||||||901|115|15|1|5|10|-1|0|1|3|0|0|0|0|0
+*|spectre:wraith:zombie:skeleton||||||912|126|9|1|5|10|-1|0|1|3|0|0|0|0|0
+*|spectre:wraith:zombie:skeleton||||||902|127|9|1|5|10|-1|0|1|3|0|0|0|0|0
+*|lich:evilmage||||||901|115|34|1|5|10|-1|0|1|1|0|0|0|0|0
+*|evilmage||||||910|118|14|1|5|10|-1|0|1|1|0|0|0|0|0
+*|spectre:wraith:zombie:skeleton:ghoul||||||910|115|14|1|0|10|-1|5|1|3|0|0|0|0|0
+*|spectre:wraith:zombie:skeleton:ghoul||||||892|113|14|1|0|10|-1|5|1|3|0|0|0|0|0
+*|evilmage||||||901|114|14|1|5|10|-1|0|1|1|0|0|0|0|0
+*|evilmage||||||911|119|34|1|5|10|-1|0|1|1|0|0|0|0|0
+*|evilmage||||||892|118|14|1|5|10|-1|0|1|1|0|0|0|0|0
+*|zombie:skeleton||||||904|115|34|1|0|10|-1|5|1|2|0|0|0|0|0
+*|spectre:wraith:zombie:skeleton||||||891|125|9|1|5|10|-1|0|1|3|0|0|0|0|0
+##
diff --git a/Scripts/Commands/BuildWorld.cs b/Scripts/Commands/BuildWorld.cs
index aa4ed29..96222fd 100644
--- a/Scripts/Commands/BuildWorld.cs
+++ b/Scripts/Commands/BuildWorld.cs
@@ -100,7 +100,7 @@ namespace Server.Scripts.Commands
Server.SpawnGenerator.Parse( m, "townanimals.map" );
Console.WriteLine( "Spawning Camps..." );
- Server.SpawnGenerator.Parse( m, "camps.map" );
+ Server.SpawnGenerator.Parse( m, "danger.map" );
Console.WriteLine( "Spawning NPC's..." );
Server.SpawnGenerator.Parse( m, "npcs.map" );
diff --git a/Scripts/Commands/GetLevel.cs b/Scripts/Commands/GetLevel.cs
new file mode 100644
index 0000000..13448bf
--- /dev/null
+++ b/Scripts/Commands/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/Mobiles/BaseCreature.cs b/Scripts/Mobiles/BaseCreature.cs
index 03efc1d..5cabc1f 100644
--- a/Scripts/Mobiles/BaseCreature.cs
+++ b/Scripts/Mobiles/BaseCreature.cs
@@ -3424,6 +3424,65 @@ namespace Server.Mobiles
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) )