01-15-2013, 10:23 PM
Доброй ночи! Ребят подскажите как быть, не могу понять в чем проблема,
сам код
проверял аргумент Add на Null, думал 1 из них возвращает Null, но вроде все норм! Вот и спрашиваю в чем проблема и как исправить!!!
Код:
Config file server.ini loaded with 13 parameters.
Config file options.ini loaded with 11 parameters.
Config file rates.ini loaded with 3 parameters.
SkillTable: loaded 7451 skills, 523 enchants.
SkillTable: learnable 112 groups, #42773 skills.
ItemTable: #18096 items, #1 sets, #804 convertable.
Templates: loaded 102 player templates.
NetworkBlock: 0 blocks.
GameTime Controller: started 18:00 PM.
MySQL: established
idfactory: used ids 1
l2world: 18496 regions done.
MapRegion: loaded 288 regions with 0 ids, resps 18
AreaTable: intercepted 380 regions with 50 zones
NpcTable: loaded #10079 NPC, #96 VIDs, 61815 drop items.
NpcData(Teleporter): loaded 44 npcs.
NpcData: loaded 1 merchants.
dublicate zone name rune09_2116_01
dublicate zone name rune09_2116_02
dublicate zone name rune09_2116_03
dublicate zone name rune09_2116_04
dublicate zone name rune09_2116_05
dublicate zone name rune09_2116_06
dublicate zone name rune09_2116_07
dublicate zone name rune09_2116_08
dublicate zone name rune09_2116_09
dublicate zone name rune09_2116_10
dublicate zone name rune09_2116_11
dublicate zone name rune09_2116_12
dublicate zone name rune09_2116_13
dublicate zone name rune09_2116_14
dublicate zone name rune09_2116_15
dublicate zone name rune09_2116_16
dublicate zone name rune09_2116_17
dublicate zone name rune09_2116_18
dublicate zone name rune09_2116_19
dublicate zone name rune09_2116_20
dublicate zone name rune09_2116_21
dublicate zone name rune09_2116_22
dublicate zone name rune09_2116_23
dublicate zone name rune09_2116_24
dublicate zone name rune09_2116_25
dublicate zone name schuttgart17_2114_21
System.TypeInitializationException: Инициализатор типа "game.tables.SpawnTable
" выдал исключение. ---> System.NullReferenceException: Ссылка на объект не указ
ывает на экземпляр объекта.
в game.tables.SpawnTable.read(String path) в C:\Users\Sergey\Desktop\l2game
\l2game\game\tables\SpawnTable.cs:строка 86
в game.tables.SpawnTable..ctor() в C:\Users\Sergey\Desktop\l2game\l2game\
game\tables\SpawnTable.cs:строка 24
в game.tables.SpawnTable..cctor() в C:\Users\Sergey\Desktop\l2game\l2game\game\tables\SpawnTable.cs:строка 13
--- Конец трассировки внутреннего стека исключений ---
в game.tables.SpawnTable.getInstance()
в game.GameServer..ctor() в C:\Users\Sergey\Desktop\l2game\l2game\game\GameServer.cs:строка 74
в game.GameServer..cctor() в C:\Users\Sergey\Desktop\l2game\l2game\game\GameServer.cs:строка 26
сам код
Код:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
using game.logger;
using game.model.npcs;
using game.world;
namespace game.tables
{
public class SpawnTable
{
private static SpawnTable instance = new SpawnTable();
public static SpawnTable getInstance()
{
return instance;
}
public readonly SortedList<string, L2Territory> territorries = new SortedList<string, L2Territory>();
public readonly List<L2Spawn> spawns = new List<L2Spawn>();
public SpawnTable()
{
foreach (string path in Directory.EnumerateFiles(@"scripts\spawn\", "*.xml"))
read(path);
CLogger.info("SpawnTable: Created " + territorries.Count+" territories with "+npcs+" monsters.");
}
private long npcs = 0;
public void read(string path)
{
XElement xml = XElement.Parse(File.ReadAllText(path));
XElement ex = xml.Element("list");
foreach (var m in ex.Elements())
{
if (m.Name == "territory")
{
L2Territory zone = new L2Territory();
zone.name = m.Attribute("name").Value;
zone.controller = m.Attribute("controller").Value;
zone.start_active = bool.Parse(m.Attribute("start_active").Value);
foreach (var stp in m.Elements())
{
switch (stp.Name.LocalName)
{
case "npc":
int cnt = Convert.ToInt32(stp.Attribute("count").Value);
string pos = null;
if (stp.Attribute("pos") != null)
pos = stp.Attribute("pos").Value;
zone.AddNpc(Convert.ToInt32(stp.Attribute("id").Value), cnt, stp.Attribute("respawn").Value, pos);
npcs += cnt;
break;
case "zone":
zone.AddPoint(stp.Attribute("loc").Value.Split(' '));
break;
}
}
zone.InitZone(); //создаем зону
if (territorries.ContainsKey(zone.name))
Console.WriteLine("dublicate zone name " + zone.name);
else
territorries.Add(zone.name, zone);
}
else if (m.Name == "spawn")
{
foreach (var stp in m.Elements())
{
switch (stp.Name.LocalName)
{
case "npc":
{
string respawn = stp.Attribute("respawn").Value;
long value = Convert.ToInt32(respawn.Remove(respawn.Length - 1));
if (respawn.Contains("s"))
value *= 1000;
else if (respawn.Contains("m"))
value *= 60000;
else if (respawn.Contains("h"))
value *= 3600000;
else if (respawn.Contains("d"))
value *= 86400000;
spawns.Add(new L2Spawn(Convert.ToInt32(stp.Attribute("id").Value), value, stp.Attribute("pos").Value.Split(' ')));
}
npcs++;
break;
}
}
}
}
}
bool nospawn = true;
public void Spawn()
{
CLogger.extra_info("NpcServer spawn init.");
if (nospawn)
{
CLogger.extra_info("NpcServer spawn done (blocked).");
return;
}
long sp = 0;
foreach (L2Territory t in territorries.Values)
{
sp += t.spawns.Count;
t.Spawn();
}
sp += spawns.Count;
foreach (L2Spawn s in spawns)
s.init();
CLogger.extra_info("NpcServer spawn done, #"+sp+" npcs.");
}
public void SunRise(bool y)
{
foreach (L2Territory t in territorries.Values)
t.SunRise(y);
foreach (L2Spawn s in spawns)
s.SunRise(y);
}
public L2Object spawnOne(int id, int x, int y, int z, int h)
{
NpcTemplate template = NpcTable.getInstance().getNpcTemplate(id);
L2Warrior o = new L2Warrior();
o.setTemplate(template);
//switch (template._type)
//{
// case NpcTemplate.L2NpcType.warrior:
// case NpcTemplate.L2NpcType.zzoldagu:
// case NpcTemplate.L2NpcType.herb_warrior:
// case NpcTemplate.L2NpcType.boss:
// o = new L2Warrior();
// ((L2Warrior)o).setTemplate(template);
// break;
// default:
// o = new L2Citizen();
// ((L2Citizen)o).setTemplate(template);
// break;
//}
o.X = x;
o.Y = y;
o.Z = z;
o.Heading = h;
o.SpawnX = x;
o.SpawnY = y;
o.SpawnZ = z;
L2World.getInstance().realiseEntry(o, null, true);
o.onSpawn();
return o;
}
}
}
проверял аргумент Add на Null, думал 1 из них возвращает Null, но вроде все норм! Вот и спрашиваю в чем проблема и как исправить!!!