Code:
public static void LoadMobs(bool Reload = false)
{
string[] FMobs;
if (!World.LowRatedServer)
FMobs = File.ReadAllLines(@"C:\" + Program.DBPath + @"\MobInfos.txt");
else FMobs = File.ReadAllLines(@"C:\" + Program.DBPath + @"\MobInfosLowRates.txt");
var Mobs = new Hashtable(FMobs.Length);
for (var i = 0; i < FMobs.Length; i++)
if (FMobs[i][0] != '*')
{
var M = new Mob(FMobs[i]);
Mobs.Add(M.MobID, M);
}
var MobsCount = 0;
if (Reload)
{
foreach (Hashtable H in World.H_Mobs.Values)
H.Clear();
World.H_Mobs.Clear();
}
string[] FSpawns = File.ReadAllLines(@"C:\" + Program.DBPath + @"\MobSpawns.txt");
foreach (string Spawn in FSpawns)
{
if (Spawn[0] == '*') return;
string[] SpawnInfo = Spawn.Split(' ');
int MobID = int.Parse(SpawnInfo[0]);
int Count = int.Parse(SpawnInfo[1]);
uint Map = uint.Parse(SpawnInfo[2]); //ushort //is this map id? yes
ushort XFrom = ushort.Parse(SpawnInfo[3]);
ushort YFrom = ushort.Parse(SpawnInfo[4]);
ushort XTo = ushort.Parse(SpawnInfo[5]);
ushort YTo = ushort.Parse(SpawnInfo[6]);
if (!World.H_Mobs.Contains(Map))
{
World.H_Mobs.Add(Map, new Hashtable());
if (!Reload) //(!Game.World.PlayersInMap.ContainsKey(Map)) //Valis fix for reloading mob spawns
World.PlayersInMap.Add(Map, new ThreadSafeDictionary<uint, Character>(400));
}
var MapMobs = (Hashtable) World.H_Mobs[Map];
var D = (DMap) DMaps.H_DMaps[Map];
for (var i = 0; i < Count; i++)
{
var _Mob = new Mob((Mob) Mobs[MobID]);
_Mob.Loc = new Location();
_Mob.Loc.Map = Map;
_Mob.Loc.X = (ushort) Program.Rnd.Next(Math.Min(XFrom, XTo), Math.Max(XFrom, XTo));
_Mob.Loc.Y = (ushort) Program.Rnd.Next(Math.Min(YFrom, YTo), Math.Max(YFrom, YTo));
try
{
while (D != null && D.GetCell(_Mob.Loc.X, _Mob.Loc.Y).NoAccess)
{
_Mob.Loc.X = (ushort) Program.Rnd.Next(Math.Min(XFrom, XTo), Math.Max(XFrom, XTo));
_Mob.Loc.Y = (ushort) Program.Rnd.Next(Math.Min(YFrom, YTo), Math.Max(YFrom, YTo));
}
}
catch
{
World.ExcAdd += "Mobid: " + _Mob.MobID + " Mob.X: " + _Mob.Loc.X + " Mob.Y: " + _Mob.Loc.Y +
" Mob.map: " + _Mob.Loc.Map + " MOBERROR! \r\n";
}
// _Mob.StartLoc = _Mob.Loc;
_Mob.StartLoc.XFrom = XFrom;
_Mob.StartLoc.XTo = XTo;
_Mob.StartLoc.YFrom = YFrom;
_Mob.StartLoc.Yto = YTo;
_Mob.StartLoc.Map = Map;
_Mob.EntityID = IdentityGenerator.Monster.GetNextIdentity;
//_Mob.EntityID = (uint) Program.Rnd.Next(400000, 500000);
//while (MapMobs.Contains(_Mob.EntityID))
//_Mob.EntityID = (uint) Program.Rnd.Next(400000, 500000);
MapMobs.Add(_Mob.EntityID, _Mob);
MobsCount++;
_Mob.LastTarget = DateTime.Now;
if (_Mob.MobID == 701 || _Mob.MobID == 700 || _Mob.MobID == 150 || _Mob.MobID == 500 ||
_Mob.MobID == 4000 || _Mob.MobID == 4008 || _Mob.MobID == 409 || _Mob.MobID == 266 ||
_Mob.MobID == 4152 || _Mob.MobID == 4171 || _Mob.MobID == 4172 || _Mob.MobID == 4170 ||
_Mob.MobID == 3823 || _Mob.MobID == 3822 || _Mob.MobID == 3821 || _Mob.MobID == 8423 ||
_Mob.MobID == 4010 || _Mob.MobID == 4011 || _Mob.MobID == 4012 || _Mob.MobID == 4013 ||
_Mob.MobID == 4014) // ultimatepluto, expmob, *dbdevil*, waterdevilking, teratodragon
{
_Mob.Alive = false;
_Mob.CurrentHP = 0;
}
}
}
if (Reload)
World.SendMsgToAll("SYSTEM", "Monsters reloaded!", 2011, 0);
World.DebugAdd += "Monsters loaded " + MobsCount + "\r\n";
}






