Пример #1
0
        public GameNPCAsset(NPCCharacter character, EGameAssetOrigin origin) : base(Guid.Parse(character.GUID), origin)
        {
            this.id   = character.ID;
            this.name = character.EditorName;

            this.character = character;
        }
Пример #2
0
 public GameAsset(Guid guid, EGameAssetOrigin origin)
 {
     this.name   = guid.ToString("N");
     this.id     = 0;
     this.type   = string.Empty;
     this.guid   = guid;
     this.origin = origin;
 }
Пример #3
0
 public GameAsset(string name, ushort id, Guid guid, string type, EGameAssetOrigin origin)
 {
     this.name   = name;
     this.id     = id;
     this.guid   = guid;
     this.type   = type;
     this.origin = origin;
 }
Пример #4
0
        private static Tuple <bool, GameAsset> TryReadAssetFile(string fileName, EGameAssetOrigin origin)
        {
            using (StreamReader sr = new StreamReader(fileName))
            {
                IFileReader formattedFileReader = null;
                try
                {
                    formattedFileReader = new KVTableReader(sr);
                }
                catch
                {
                    return(new Tuple <bool, GameAsset>(false, null));
                }
                IFileReader formattedFileReader2 = formattedFileReader.readObject("Metadata");
                Guid        gUID = formattedFileReader2.readValue <Guid>("GUID");
                Type        type = formattedFileReader2.readValue <Type>("Type");
                if (type == null)
                {
                    return(new Tuple <bool, GameAsset>(false, null));
                }
                try
                {
                    GameAsset asset = Activator.CreateInstance(type, gUID, origin) as GameAsset;
                    if (asset != null)
                    {
                        asset.guid = gUID;
                        formattedFileReader.readKey("Asset");
                        asset.read(formattedFileReader);
                        asset.name = Path.GetFileNameWithoutExtension(fileName);
                        return(new Tuple <bool, GameAsset>(true, asset));
                    }
                }
                catch (Exception ex)
                {
                    App.Logger.LogException($"Could not create instance of {type.Name}", ex: ex);
                }
            }

            return(new Tuple <bool, GameAsset>(false, null));
        }
Пример #5
0
 public GameCurrencyAsset(CurrencyAsset asset, EGameAssetOrigin origin) : base(asset.ValueFormat, 0, Guid.Parse(asset.GUID), "currency", origin)
 {
     valueFormat = asset.ValueFormat;
     entries     = asset.Entries.ToArray();
 }
Пример #6
0
 public static bool TryGetAsset <T>(ushort id, EGameAssetOrigin origin, out T result) where T : GameAsset
 {
     return(TryGetAsset((k) => k.id == id && origin.HasFlag(k.origin), out result));
 }
Пример #7
0
        public static async Task Import(string directory, EGameAssetOrigin origin, Action <int, int> fileLoadedCallback = null, CancellationTokenSource tokenSource = null)
        {
            if (!Directory.Exists(directory))
            {
                await App.Logger.Log($"Cancelled import from '{directory}'. Directory does not exist.", Logging.ELogLevel.WARNING);

                return;
            }

            Queue <ScannedFileInfo> files = new Queue <ScannedFileInfo>();

            HashSet <string> ignoreFileNames = new HashSet <string>();

            foreach (object langValue in Enum.GetValues(typeof(ELanguage)))
            {
                ignoreFileNames.Add(langValue + ".dat");
            }

            foreach (FileInfo file in new DirectoryInfo(directory).GetFiles("*.dat", SearchOption.AllDirectories))
            {
                if (ignoreFileNames.Contains(file.Name))
                {
                    continue;
                }
                files.Enqueue(new LegacyFileInfo(file));
            }

            foreach (FileInfo file in new DirectoryInfo(directory).GetFiles("*.asset", SearchOption.AllDirectories))
            {
                files.Enqueue(new AssetFileInfo(file));
            }

            int index = -1;
            int total = files.Count;

            foreach (var fi in files)
            {
                if (tokenSource != null && tokenSource.IsCancellationRequested)
                {
                    await App.Logger.Log("Cancelled import", Logging.ELogLevel.TRACE);

                    break;
                }

                index++;
                try
                {
                    if (fi is LegacyFileInfo)
                    {
                        var res = await TryReadLegacyAssetFile(fi.Info.FullName, origin);

                        if (res.Item1)
                        {
                            _assets.Add(res.Item2);
                            ImportedAssetCount++;
                        }
                    }
                    else if (fi is AssetFileInfo)
                    {
                        var res = TryReadAssetFile(fi.Info.FullName, origin);
                        if (res.Item1)
                        {
                            _assets.Add(res.Item2);
                            ImportedAssetCount++;
                        }
                    }
                }
                catch (Exception ex)
                {
                    await App.Logger.LogException($"Could not import asset '{fi.Info.FullName}'", ex : ex);
                }
                fileLoadedCallback?.Invoke(index, total);
            }
        }
Пример #8
0
 public GameSpawnAsset(Guid guid, EGameAssetOrigin origin) : base(guid, origin)
 {
 }
Пример #9
0
        public GameSpawnAsset(DataReader data, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(name, id, guid, type, origin)
        {
            int num = data.ReadInt32("Roots");

            insertRoots = new List <SpawnTable>(num);
            for (int i = 0; i < num; i++)
            {
                SpawnTable spawnTable = new SpawnTable();
                spawnTable.spawnID    = data.ReadUInt16($"Root_{i}_Spawn_ID", 0);
                spawnTable.isOverride = data.Has($"Root_{i}_Override");
                spawnTable.weight     = data.ReadInt32($"Root_{i}_Weight", spawnTable.isOverride ? 1 : 0);
                spawnTable.chance     = 0f;
                insertRoots.Add(spawnTable);
            }
            _roots = new List <SpawnTable>(num);
            int num2 = data.ReadInt32("Tables");

            _tables = new List <SpawnTable>(num2);
            for (int j = 0; j < num2; j++)
            {
                SpawnTable spawnTable2 = new SpawnTable
                {
                    assetID = data.ReadUInt16($"Table_{j}_Asset_ID", 0),
                    spawnID = data.ReadUInt16($"Table_{j}_Spawn_ID", 0),
                    weight  = data.ReadInt32($"Table_{j}_Weight"),
                    chance  = 0f
                };
                tables.Add(spawnTable2);
            }
            areTablesDirty = true;
        }
Пример #10
0
        public GameItemClothingAsset(DataReader data, DataReader local, string dirName, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(data, local, dirName, name, id, guid, type, origin)
        {
            if (isPro)
            {
                armor          = 1f;
                explosionArmor = 1f;
            }
            else
            {
                armor          = data.ReadSingle("Armor", 1f);
                explosionArmor = data.ReadSingle("Armor_Explosion", armor);
                proofWater     = data.Has("Proof_Water");
                proofFire      = data.Has("Proof_Fire");
            }

            hairVisible  = data.ReadBoolean("Hair_Visible", true);
            beardVisible = data.ReadBoolean("Beard_Visible", true);
        }
 public GameObjectAsset(Guid guid, EGameAssetOrigin origin) : base(guid, origin)
 {
 }
 public GameWeatherAsset(string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(name, id, guid, type, origin)
 {
 }
Пример #13
0
 public GameDialogueAsset(DataReader data, DataReader local, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(name, id, guid, type, origin)
 {
     dialogue = new Parsing.ParseTool(data, local).ParseDialogue();
 }
        public GameItemGunAsset(DataReader data, DataReader local, string dirName, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(data, local, dirName, name, id, guid, type, origin)
        {
            hasSight    = data.Has("Hook_Sight");
            hasTactical = data.Has("Hook_Tactical");
            hasGrip     = data.Has("Hook_Grip");
            hasBarrel   = data.Has("Hook_Barrel");

            int num2 = data.ReadInt32("Magazine_Calibers", 0);

            if (num2 > 0)
            {
                magazineCalibers = new ushort[num2];
                for (int j = 0; j < num2; j++)
                {
                    magazineCalibers[j] = data.ReadUInt16($"Magazine_Caliber_{j}", 0);
                }
                int num3 = data.ReadInt32("Attachment_Calibers");
                if (num3 > 0)
                {
                    attachmentCalibers = new ushort[num3];
                    for (int k = 0; k < num3; k++)
                    {
                        attachmentCalibers[k] = data.ReadUInt16($"Attachment_Caliber_{k}", 0);
                    }
                }
                else
                {
                    attachmentCalibers = magazineCalibers;
                }
            }
            else
            {
                magazineCalibers    = new ushort[1];
                magazineCalibers[0] = data.ReadUInt16("Caliber", 0);
                attachmentCalibers  = magazineCalibers;
            }
        }
Пример #15
0
        private static async Task <Tuple <bool, GameAsset> > TryReadLegacyAssetFile(string fileName, EGameAssetOrigin origin)
        {
            string drContent;

            using (StreamReader sr = new StreamReader(fileName))
            {
                drContent = await sr.ReadToEndAsync();
            }

            DataReader dr = new DataReader(drContent);

            DataReader local = null;

            var t = dr.ReadString("Type");

            if (string.IsNullOrEmpty(t))
            {
                return(new Tuple <bool, GameAsset>(false, null));
            }

            string dir      = Path.GetDirectoryName(fileName);
            string shortDir = new DirectoryInfo(dir).Name;

            string name;

            string localPath = Path.Combine(dir, "English.dat");

            if (File.Exists(localPath))
            {
                string locContent;

                using (StreamReader sr = new StreamReader(localPath))
                {
                    locContent = await sr.ReadToEndAsync();
                }

                local = new DataReader(locContent);

                name = local.ReadString("Name", shortDir);
            }
            else
            {
                name = shortDir;
            }

            if (!dr.Has("ID") || !dr.Has("GUID"))
            {
                return(new Tuple <bool, GameAsset>(false, null));
            }

            ushort id   = dr.ReadUInt16("ID");
            Guid   guid = dr.ReadGUID("GUID");

            var vt = t.ToLowerInvariant();

            switch (vt)
            {
            case "item":
            case "food":
            case "water":
            case "medical":
            case "melee":
            case "fuel":
            case "tool":
            case "barricade":
            case "storage":
            case "beacon":
            case "farm":
            case "trap":
            case "structure":
            case "supply":
            case "throwable":
            case "grower":
            case "optic":
            case "refill":
            case "fisher":
            case "cloud":
            case "map":
            case "key":
            case "box":
            case "arrest_start":
            case "arrest_end":
            case "tank":
            case "generator":
            case "detonator":
            case "charge":
            case "library":
            case "filter":
            case "sentry":
            case "vehicle_repair_tool":
            case "tire":
            case "compass":
            case "oil_pump":
                return(new Tuple <bool, GameAsset>(true, new GameItemAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "hat":
                return(new Tuple <bool, GameAsset>(true, new GameItemHatAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "pants":
                return(new Tuple <bool, GameAsset>(true, new GameItemPantsAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "sight":
                return(new Tuple <bool, GameAsset>(true, new GameItemSightAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "barrel":
                return(new Tuple <bool, GameAsset>(true, new GameItemBarrelAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "tactical":
                return(new Tuple <bool, GameAsset>(true, new GameItemTacticalAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "magazine":
                return(new Tuple <bool, GameAsset>(true, new GameItemMagazineAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "grip":
                return(new Tuple <bool, GameAsset>(true, new GameItemGripAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "shirt":
                return(new Tuple <bool, GameAsset>(true, new GameItemShirtAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "glasses":
                return(new Tuple <bool, GameAsset>(true, new GameItemGlassesAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "mask":
                return(new Tuple <bool, GameAsset>(true, new GameItemMaskAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "backpack":
                return(new Tuple <bool, GameAsset>(true, new GameItemBackpackAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "vest":
                return(new Tuple <bool, GameAsset>(true, new GameItemVestAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            case "npc":
                return(new Tuple <bool, GameAsset>(true, new GameNPCAsset(dr, local, name, id, guid, vt, origin)));

            case "dialogue":
                return(new Tuple <bool, GameAsset>(true, new GameDialogueAsset(dr, local, name, id, guid, vt, origin)));

            case "quest":
                return(new Tuple <bool, GameAsset>(true, new GameQuestAsset(dr, local, name, id, guid, vt, origin)));

            case "vendor":
                return(new Tuple <bool, GameAsset>(true, new GameVendorAsset(dr, local, name, id, guid, vt, origin)));

            case "vehicle":
                return(new Tuple <bool, GameAsset>(true, new GameVehicleAsset(dr, name, id, guid, vt, origin)));

            case "animal":
                return(new Tuple <bool, GameAsset>(true, new GameAnimalAsset(dr, name, id, guid, vt, origin)));

            case "large":
            case "medium":
            case "small":
                return(new Tuple <bool, GameAsset>(true, new GameObjectAsset(dr, name, id, guid, vt, origin)));

            case "spawn":
                return(new Tuple <bool, GameAsset>(true, new GameSpawnAsset(dr, name, id, guid, vt, origin)));

            case "resource":
                return(new Tuple <bool, GameAsset>(true, new GameResourceAsset(dr, name, id, guid, vt, origin)));

            case "gun":
                return(new Tuple <bool, GameAsset>(true, new GameItemGunAsset(dr, local, shortDir, name, id, guid, vt, origin)));

            default:
                return(new Tuple <bool, GameAsset>(true, new GameAsset(name, id, guid, vt, origin)));
            }
        }
Пример #16
0
 public GameItemBagAsset(DataReader data, DataReader local, string dirName, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(data, local, dirName, name, id, guid, type, origin)
 {
     width  = data.ReadByte("Width", 0);
     height = data.ReadByte("Height", 0);
 }
Пример #17
0
 public GameItemGearAsset(DataReader data, DataReader local, string dirName, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(data, local, dirName, name, id, guid, type, origin)
 {
     base.hairVisible  = data.Has("Hair");
     base.beardVisible = data.Has("Beard");
 }
 public GameVendorAsset(NPCVendor vendor, EGameAssetOrigin origin) : base(vendor.Title, vendor.ID, Guid.Parse(vendor.GUID), "Vendor", origin)
 {
     this.vendor = vendor;
 }
Пример #19
0
 public GameNPCAsset(DataReader data, DataReader local, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(data, name, id, guid, type, origin)
 {
     character = new Parsing.ParseTool(data, local).ParseCharacter();
 }
Пример #20
0
 public GameDialogueAsset(NPCDialogue dialogue, EGameAssetOrigin origin) : base($"Asset_{dialogue.ID}", dialogue.ID, Guid.Parse(dialogue.GUID), "Dialogue", origin)
 {
     this.dialogue = dialogue;
 }
 public GameWeatherAsset(Guid guid, EGameAssetOrigin origin) : base(guid, origin)
 {
 }
Пример #22
0
 public GameCurrencyAsset(Guid guid, EGameAssetOrigin origin) : base(guid, origin)
 {
 }
 public GameQuestAsset(DataReader data, DataReader local, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(name, id, guid, type, origin)
 {
     quest = new Parsing.ParseTool(data, local).ParseQuest();
 }
 public GameQuestAsset(NPCQuest quest, EGameAssetOrigin origin) : base(quest.Title, quest.ID, Guid.Parse(quest.GUID), "Quest", origin)
 {
     this.quest = quest;
 }
Пример #25
0
 public GameItemGripAsset(DataReader data, DataReader local, string dirName, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(data, local, dirName, name, id, guid, type, origin)
 {
 }
Пример #26
0
        public GameItemAsset(DataReader data, DataReader local, string dirName, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(name, id, guid, type, origin)
        {
            this.dirName = dirName;

            if (local != null)
            {
                itemDescription = local.ReadString("Description", string.Empty);
            }
            else
            {
                itemDescription = string.Empty;
            }

            isPro  = data.Has("Pro");
            rarity = data.ReadEnum("Rarity", EGameItemRarity.Common);
            sizeX  = data.ReadByte("Size_X", 0);
            if (sizeX < 1)
            {
                sizeX = 1;
            }
            sizeY = data.ReadByte("Size_Y", 0);
            if (sizeY < 1)
            {
                sizeY = 1;
            }

            useable        = data.ReadString("Useable");
            canPlayerEquip = data.ReadBoolean("Can_Player_Equip", !string.IsNullOrEmpty(useable));

            slot = data.ReadEnum("Slot", Equip_Type.None);
        }
Пример #27
0
 public GameResourceAsset(DataReader data, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(name, id, guid, type, origin)
 {
 }
Пример #28
0
        public GameItemCaliberAsset(DataReader data, DataReader local, string dirName, string name, ushort id, Guid guid, string type, EGameAssetOrigin origin) : base(data, local, dirName, name, id, guid, type, origin)
        {
            calibers = new ushort[data.ReadByte("Calibers", 0)];

            for (int i = 0; i < calibers.Length; i++)
            {
                calibers[i] = data.ReadUInt16($"Caliber_{i}", 0);
            }
        }