Пример #1
0
        public static void getMinMax(string worldName_, ref int x, ref int y)
        {
            string worldName = worldName_;

            if (!worldName_.Contains("cdr"))
            {
                worldName = worldName + "_map.cdr";
            }
            AssetDatabase adb = AssetDatabaseInst.DB;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            watch.Start();
            if (!adb.getManifest().containsHash(Util.hashFileName(worldName)))
            {
                throw new Exception("Unable to find world name:" + worldName);
            }
            byte[] data = adb.extractUsingFilename(worldName);
            //Debug.Log("extract in " + watch.ElapsedMilliseconds + " ms");

            watch.Reset(); watch.Start();
            CObject obj = Parser.processStreamObject(data);

            //Debug.Log("processStreamObject in " + watch.ElapsedMilliseconds + " ms");

            watch.Reset(); watch.Start();
            //Debug.Log("got world name:" + worldName);
            y = obj.getIntMember(3) * 256;
            if (obj.hasMember(2))
            {
                x = obj.getIntMember(2) * 256;
            }
            else
            {
                x = y;
            }
            //Debug.Log("get min max in " + watch.ElapsedMilliseconds + " ms");
            watch.Stop();
        }
Пример #2
0
    private string getLocalized(CObject obj, string defaultText)
    {
        if (obj == null)
        {
            return(defaultText);
        }
        if (obj.type != 7703)
        {
            throw new Exception("Not a localizable entry");
        }
        int textID = obj.getIntMember(0);

        return(DBInst.lang_inst.getOrDefault(textID, defaultText));
    }
Пример #3
0
        private static List <string> getSky(long key)
        {
            List <string> ilist   = new List <string>();
            CObject       entry   = DBInst.inst.getObject(114, key);
            CObject       skyInfo = DBInst.inst.getObject(111, entry.getIntMember(31));
            CObject       list    = skyInfo.getMember(20);

            for (int i = 0; i < list.members.Count; i++)
            {
                int _7305 = list.getIntMember(i);
                ilist.Add(DBInst.inst.getObject(7305, _7305).getStringMember(2));
            }
            return(ilist);
        }
Пример #4
0
        private static List <Zone> getZones(string worldNameNoCDR)
        {
            List <Zone> zones = new List <Zone>();

            try
            {
                string        worldName = worldNameNoCDR + "_map.cdr";
                AssetDatabase adb       = AssetDatabaseInst.DB;
                if (!adb.getManifest().containsHash(Util.hashFileName(worldName)))
                {
                    throw new Exception("Unable to find world name:" + worldName);
                }
                Debug.Log("loading world zones:" + worldName);
                byte[]  data = adb.extractUsingFilename(worldName);
                CObject obj  = Parser.processStreamObject(data);

                CObject zonesObj = obj.getMember(8);
                Debug.Log("found zones object with " + zonesObj.members.Count + " members");
                for (int i = 0; i < zonesObj.members.Count; i++)
                {
                    CObject zoneObj = zonesObj.get(i);
                    long    key     = zoneObj.getIntMember(0);
                    //Debug.Log("found zone with key:" + key);
                    List <Vector3> points = getPoints(zoneObj.getMember(3));
                    Zone           zone   = new WorldStuff.Zone();
                    zone._113Key = key;
                    zone.name    = getZoneName(key);
                    zone.points  = points;
                    //zone.sky = getSky(key);
                    zones.Add(zone);
                }
            }catch (Exception ex)
            {
                Debug.LogWarning(ex);
            }
            return(zones);
        }
Пример #5
0
        public ClothingItem(DB db, long id, long key)
        {
            this.key = key;
            this.id  = id;
            try
            {
                CObject gearDef = db.toObj(id, key);
                if (id == 7629)
                {
                    this.name = gearDef.getMember(0).convert() + "";
                    if (gearDef.hasMember(1))
                    {
                        this.langKey = gearDef.getMember(1).getIntMember(0);
                    }
                    if (gearDef.hasMember(4))
                    {
                        icon = db.toObj(6009, gearDef.getIntMember(4)).getStringMember(1);
                    }
                    if (gearDef.hasMember(5))
                    {
                        CObject allowedSlotsArray = gearDef.getMember(5);
                        foreach (CObject o in allowedSlotsArray.members)
                        {
                            int slot = int.Parse(o.convert() + "");
                            allowedSlots.Add(WardrobeStuff.getSlot(slot));
                        }
                    }


                    if (gearDef.hasMember(6))
                    {
                        type = WardrobeStuff.getGearType(gearDef.getIntMember(6));
                    }
                    if (gearDef.hasMember(7))
                    {
                        hidden = gearDef.getBoolMember(7, false);
                    }
                    nifKey = gearDef.getIntMember(2);
                    nifRef = new NIFReference(db, nifKey);
                }
                else if (id == 7305)
                {
                    nifRef = new NIFReference(db, key);
                    nifKey = key;


                    if (gearDef.hasMember(2))
                    {
                        string nifPath = gearDef.getMember(2).convert() + "";
                        this.name = System.IO.Path.GetFileName(nifPath);
                        if (nifPath.Contains(@"\player\") && nifPath.Contains(@"\wings\"))
                        {
                            allowedSlots.Add(GearSlot.CAPE);
                        }
                    }

                    if (gearDef.hasMember(15))
                    {
                        CObject allowedSlotsArray = gearDef.getMember(15);
                        foreach (CObject o in allowedSlotsArray.members)
                        {
                            int slot = int.Parse(o.convert() + "");
                            allowedSlots.Add(WardrobeStuff.getSlot(slot));
                        }
                    }
                    else
                    {
                    }
                }
                else
                {
                    throw new Exception("Bad id:" + id);
                }
            }
            catch (Exception ex)
            {
                Debug.Log("Unable to process [" + this + "] nif reference:" + ex);
            }
        }