Exemplo n.º 1
0
        ///////////////////////////////////////////////////
        // Member Functions
        ///////////////////////////////////////////////////
        /// <summary>
        /// Loads all game assets
        /// </summary>
        public bool load(CfgInfo zoneConf, string configFilename)
        {
            _singleton = this;

            _assetList = new List <AssetInfo>();

            //Add the game config
            addAssetData(AssetFileFactory.CreateFromFile <AssetFile>(configFilename));

            //Load shit up
            ItemFile    itms = AssetFileFactory.CreateFromFile <ItemFile>(zoneConf.level.itmFile);
            LioFile     lios = AssetFileFactory.CreateFromFile <LioFile>(zoneConf.level.lioFile);
            SkillFile   rpgs = AssetFileFactory.CreateFromFile <SkillFile>(zoneConf.level.rpgFile);
            VehicleFile vehs = AssetFileFactory.CreateFromFile <VehicleFile>(zoneConf.level.vehFile);
            LevelFile   lvl  = AssetFileFactory.CreateFromFile <LevelFile>(zoneConf.level.lvlFile);

            if (itms == null || lios == null || rpgs == null || vehs == null || lvl == null)
            {                   //Missing a core file
                foreach (string missing in AssetFileFactory._missingFiles)
                {
                    Log.write(TLog.Error, "Missing file: {0}", missing);
                }
                return(false);
            }

            Level = lvl.Data;

            //Save checksums to send to clients
            addAssetData(itms);
            addAssetData(lios);
            addAssetData(rpgs);
            addAssetData(vehs);
            addAssetData(lvl);

            //Make item maps
            _idToItem   = new SortedDictionary <int, ItemInfo>();
            _nameToItem = new SortedDictionary <string, ItemInfo>();
            foreach (ItemInfo it in itms.Data)
            {
                _idToItem.Add(it.id, it);
            }
            foreach (ItemInfo it in itms.Data)
            {
                if (!_nameToItem.ContainsKey(it.name.ToLower()))
                {
                    _nameToItem.Add(it.name.ToLower(), it);
                }
            }

            //Make skill maps
            _idToSkill   = new SortedDictionary <int, SkillInfo>();
            _nameToSkill = new SortedDictionary <string, SkillInfo>();
            foreach (SkillInfo it in rpgs.Data)
            {
                _idToSkill.Add(it.SkillId, it);
            }
            foreach (SkillInfo it in rpgs.Data)
            {
                if (!_nameToSkill.ContainsKey(it.Name.ToLower()))
                {
                    _nameToSkill.Add(it.Name.ToLower(), it);
                }
            }

            //Make lio map
            _idToLio = new SortedDictionary <int, LioInfo>();
            foreach (LioInfo it in lios.Data)
            {
                _idToLio.Add(it.GeneralData.Id, it);
            }

            //Load blo files
            _bloList = new List <string>();

            foreach (string file in ItemInfo.BlobsToLoad)
            {
                loadBloFile(file + ".blo");
            }
            foreach (string file in CfgInfo.BlobsToLoad)
            {
                loadBloFile(file + ".blo");
            }
            foreach (string file in LioInfo.BlobsToLoad)
            {
                loadBloFile(file + ".blo");
            }
            foreach (string file in SkillInfo.BlobsToLoad)
            {
                loadBloFile(file + ".blo");
            }
            foreach (LvlInfo.BlobReference blob in Level.ObjectBlobs)
            {
                loadBloFile(blob.FileName);
            }
            foreach (LvlInfo.BlobReference blob in Level.FloorBlobs)
            {
                loadBloFile(blob.FileName);
            }

            //Make vehicle map
            _idToVehicle = new SortedDictionary <int, VehInfo>();
            foreach (VehInfo it in vehs.Data)
            {
                _idToVehicle.Add(it.Id, it);
                foreach (string blo in it.blofiles)
                {
                    loadBloFile(blo + ".blo");
                }
            }
            foreach (string blo in _bloList)
            {                   //Attempt to load it
                BloFile blof = AssetFileFactory.LoadBlobFromFile <BloFile>(blo);
                if (blof != null)
                {
                    addAssetData(blof);
                }
            }

            //For debugging
            _bloList.Sort();
            _bloListFileName = "bloList_" + configFilename + ".txt";
            System.IO.File.WriteAllLines(string.Format("{0}/{1}", Environment.CurrentDirectory, _bloListFileName), _bloList);

            //Update our asset server
            sendDataToDirectory();

            //Initialize our lio data
            Lios = new Lio(this);

            //Load news file
            AssetFile nws = AssetFileFactory.CreateFromFile <AssetFile>(zoneConf.level.nwsFile);

            if (nws != null)
            {
                addAssetData(nws);
            }

            //Load the helpMenu files
            for (int i = 0; i <= zoneConf.helpMenu.links.Count - 1; i++)
            {
                AssetFile helpMenu = AssetFileFactory.CreateFromFile <AssetFile>(zoneConf.helpMenu.links[i].name);
                if (helpMenu != null)
                {
                    addAssetData(helpMenu);
                }
            }

            //Load everything else
            loadAdditionalAssets();

            //Are we missing files?
            if (AssetFileFactory.IsIncomplete)
            {                   //Missing a core file
                foreach (string missing in AssetFileFactory._missingFiles)
                {
                    Log.write(TLog.Error, "Missing file: {0}", missing);
                }
                return(false);
            }

            //Cache all our assets
            AssetCache = new Cache(this);
            AssetCache.prepareCache(_assetList);
            return(true);
        }