Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Исключение! (https://forum.zone-game.info/showthread.php?t=25784)

SkyWard 15.01.2013 22:23

Исключение!
 
Доброй ночи! Ребят подскажите как быть, не могу понять в чем проблема,
Код:

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, но вроде все норм! Вот и спрашиваю в чем проблема и как исправить!!!

x3k 15.01.2013 22:53

Re: Исключение!
 
а с самой xml то все нормально?

SkyWard 15.01.2013 22:57

Re: Исключение!
 
ну вроде да, от pts freya!

Deazer 15.01.2013 23:06

Re: Исключение!
 
ну отчивидно же , что одинаковые зоны по имени. Поменяй их имя , те которые дублицируются , добавь в конце _1. У тебя "примари кейем" имя зоны , у ПТСки такого нет.

bloodshed 16.01.2013 02:07

Re: Исключение!
 
Проверь получение:
stp.Attribute("id")
stp.Attribute("pos")

SkyWard 16.01.2013 07:06

Re: Исключение!
 
Цитата:

Сообщение от bloodshed (Сообщение 264631)
Проверь получение:
stp.Attribute("id")
stp.Attribute("pos")

да да, позже проверю....! Спс!

SkyWard 19.01.2013 10:58

Re: Исключение!
 
Вроде бы все норм дохожу до создания перса, пишу ник, и тут выдает System.NullReferenceException!
Сама строка куда ссылается
Код:

if (cc.supMethod.Method <= SupMethod.SUB)
и сам класс
Код:

namespace c_game.model.skills2
{
    public class SupMethod
    {
        public byte Method;
        public double Value;

        public const byte ADD = 1;
        public const byte SUB = 2;
        public const byte MUL = 3;
        public const byte DIV = 4;
        public const byte OVR = 5;
    }
}


Sp1tfire 19.01.2013 12:51

Re: Исключение!
 
Цитата:

Сообщение от KapkapoB (Сообщение 265664)
Вроде бы все норм дохожу до создания перса, пишу ник, и тут выдает System.NullReferenceException!
Сама строка куда ссылается
Код:

if (cc.supMethod.Method <= SupMethod.SUB)
и сам метод
Код:

namespace c_game.model.skills2
{
    public class SupMethod
    {
        public byte Method;
        public double Value;

        public const byte ADD = 1;
        public const byte SUB = 2;
        public const byte MUL = 3;
        public const byte DIV = 4;
        public const byte OVR = 5;
    }
}


какой же это метод? это клас.
проверяй инициализацию cc.


Текущее время: 02:30. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot