public static void Extents(Ytyp[] ytypfiles, Ymap[] ymapfiles) { List <CBaseArchetypeDef> archetypeList = null; if (ytypfiles != null && ytypfiles.Length != 0) { archetypeList = Ytyp.Merge(ytypfiles).CMapTypes.archetypes; } if (ymapfiles != null && ymapfiles.Length != 0) { for (int i = 0; i < ymapfiles.Length; i++) { HashSet <string> missing = ymapfiles[i].UpdateExtents(archetypeList); if (missing?.Any() ?? false) { foreach (string name in missing) { Console.WriteLine("Missing CBaseArchetypeDef: " + name); } } ymapfiles[i].WriteXML().Save(ymapfiles[i].filename); Console.WriteLine("Updated extents for " + ymapfiles[i].filename); } } }
public static void Merge(Ytyp[] ytypfiles, Ymap[] ymapfiles) { if (ytypfiles != null && ytypfiles.Length != 0) { Ytyp.Merge(ytypfiles).WriteXML().Save("merged.ytyp.xml"); Console.WriteLine("Exported merged.ytyp.xml"); } if (ymapfiles != null && ymapfiles.Length != 0) { Ymap.Merge(ymapfiles).WriteXML().Save("merged.ymap.xml"); Console.WriteLine("Exported merged.ymap.xml"); } }
public static void RemoveFromList(Ytyp[] ytypfiles, Ymap[] ymapfiles) { List <string> removelist = new List <string>(); Console.WriteLine("Insert the file to load names from: (ex. list.txt)"); string filename = Console.ReadLine(); using (StreamReader reader = new StreamReader(filename)) { string line; while ((line = reader.ReadLine()) != null) { removelist.Add(line.Trim().ToLower()); } } if (ytypfiles != null && ytypfiles.Length != 0) { for (int i = 0; i < ytypfiles.Length; i++) { List <CBaseArchetypeDef> removed_archetypes = ytypfiles[i].RemoveArchetypesByNames(removelist); ytypfiles[i].WriteXML().Save(ytypfiles[i].filename); Console.WriteLine("Updated " + (ytypfiles[i].filename)); Ytyp removedytyp = ytypfiles[i]; removedytyp.CMapTypes.archetypes = removed_archetypes; removedytyp.WriteXML().Save(ytypfiles[i].filename.Split('.')[0] + "_removed.ytyp.xml"); Console.WriteLine("Exported {0}_removed.ytyp.xml", ytypfiles[i].filename.Split('.')[0]); } } if (ymapfiles != null && ymapfiles.Length != 0) { for (int i = 0; i < ymapfiles.Length; i++) { List <CEntityDef> removed_entities = ymapfiles[i].RemoveEntitiesByNames(removelist); ymapfiles[i].WriteXML().Save(ymapfiles[i].filename); Console.WriteLine("Updated " + (ymapfiles[i].filename)); Ymap removedymap = ymapfiles[i]; removedymap.CMapData.entities = removed_entities; removedymap.WriteXML().Save(ymapfiles[i].filename.Split('.')[0] + "_removed.ymap.xml"); Console.WriteLine("Exported {0}_removed.ymap.xml", ymapfiles[i].filename.Split('.')[0]); } } }
//TEMP public static void GenerateMLO(string ytyppath, string ymappath) { Console.WriteLine("Insert the name for the MLO:"); string mloname = Console.ReadLine(); Ytyp theytyp = new Ytyp(XDocument.Load(ytyppath), mloname); Ymap theymap = new Ymap(XDocument.Load(ymappath), mloname); if (theytyp != null && theymap != null) { CMloInstanceDef mloent = new CMloInstanceDef(mloname); CMloArchetypeDef mloarc = new CMloArchetypeDef(mloname); //COPY VALUES mloarc.entities = theymap.CMapData.entities; mloarc.lodDist = theytyp.CMapTypes.archetypes.Max(arc => arc.lodDist); mloarc.hdTextureDist = theytyp.CMapTypes.archetypes.Max(arc => arc.hdTextureDist); mloent.lodDist = theymap.CMapData.entities.Max(ent => ent.lodDist); //GET CENTROID OF ENTITIES AND USE IT AS MLO POSITION foreach (CEntityDef ent in theymap.CMapData.entities) { mloent.position += ent.position; } mloent.position = mloent.position / theymap.CMapData.entities.Count; //CHANGE COORDSYSTEM TO PARENT'S ONE foreach (CEntityDef ent in mloarc.entities) { ent.position = ent.position - mloent.position; } //WEIRD WAY OF SAVING BECAUSE I'M ACTUALLY TOO BORED TO FIX ALL THE CODE TO SUPPORT MLO :DDDDDDDDDDD theytyp.CMapTypes.name = mloname; XDocument doc = theytyp.WriteXML(); doc.Element("CMapTypes").Element("archetypes").Add(mloarc.WriteXML()); doc.Save(mloname + ".ytyp.xml"); Console.WriteLine(mloname + ".ytyp.xml"); theymap.CMapData.name = mloname; theymap.CMapData.entities = new List <CEntityDef>(); doc = theymap.WriteXML(); doc.Element("CMapData").Element("entities").Add(mloent.WriteXML()); doc.Save(mloname + ".ymap.xml"); Console.WriteLine(mloname + ".ymap.xml"); } }
public static Ytyp[] CollectYtyps(DirectoryInfo dir) { Ytyp[] ytyps = null; FileInfo[] files = dir.GetFiles("*.ytyp.xml"); if (files.Length == 0) { Console.WriteLine("No .ytyp.xml file found."); } else { ytyps = new Ytyp[files.Length]; for (int i = 0; i < files.Length; i++) { ytyps[i] = new Ytyp(XDocument.Load(files[i].Name), files[i].Name); } } return(ytyps); }
public static void Reset(Ytyp[] ytypfiles, Ymap[] ymapfiles) { List <CBaseArchetypeDef> archetypeList = null; if (ytypfiles != null && ytypfiles.Length != 0) { for (int i = 0; i < ytypfiles.Length; i++) { ytypfiles[i].UpdatelodDist(); foreach (CBaseArchetypeDef arc in ytypfiles[i].CMapTypes.archetypes) { arc.flags = 0; arc.specialAttribute = 0; } ytypfiles[i].WriteXML().Save(ytypfiles[i].filename); Console.WriteLine("Resetted " + ytypfiles[i].filename); } archetypeList = Ytyp.Merge(ytypfiles).CMapTypes.archetypes; } if (ymapfiles != null && ymapfiles.Length != 0) { for (int i = 0; i < ymapfiles.Length; i++) { ymapfiles[i].UpdatelodDist(archetypeList); ymapfiles[i].CMapData.block = new CBlockDesc(0, 0, "GTADrifting", "Neos7's MapTools", Environment.UserName); ymapfiles[i].CMapData.flags = 0; ymapfiles[i].CMapData.contentFlags = 1; foreach (CEntityDef ent in ymapfiles[i].CMapData.entities) { ent.flags = 0; ent.childLodDist = 0; } ymapfiles[i].WriteXML().Save(ymapfiles[i].filename); Console.WriteLine("Resetted " + (ymapfiles[i].filename)); } } }
public static void ConvertJson(FivemJson[] jsonfiles) { if (jsonfiles == null || jsonfiles.Length <= 0) { return; } Ytyp[] ytypfiles = new Ytyp[jsonfiles.Length]; Ymap[] ymapfiles = new Ymap[jsonfiles.Length]; for (int i = 0; i < jsonfiles.Length; i++) { ytypfiles[i] = new Ytyp(jsonfiles[i].filename.Replace(".json", ".ytyp.xml")); ytypfiles[i].CMapTypes.name = jsonfiles[i].filename.Replace(".json", ""); List <CBaseArchetypeDef> unresolved_arc = new List <CBaseArchetypeDef>(); foreach (FivemArchetype a in jsonfiles[i].archetypes) { CBaseArchetypeDef arc = new CBaseArchetypeDef(); //arc.lodDist = 0; arc.flags = 0; arc.specialAttribute = 0; arc.bbMin = a.aabbMin; arc.bbMax = a.aabbMax; arc.bsCentre = a.centroid; arc.bsRadius = a.radius; //arc.hdTextureDist = 0; arc.name = a.archetypeName; arc.textureDictionary = a.txdName; arc.clipDictionary = null; arc.drawableDictionary = null; arc.physicsDictionary = a.archetypeName; arc.assetType = assetType.ASSET_TYPE_DRAWABLE; arc.assetName = a.archetypeName; arc.extensions = null; arc.lodDist = 100 + (1.5f * arc.bsRadius); arc.hdTextureDist = 0.75f * arc.lodDist; if (a.archetypeName.StartsWith("0x") || a.txdName.StartsWith("0x")) { unresolved_arc.Add(arc); } else { ytypfiles[i].CMapTypes.archetypes.Add(arc); } } ymapfiles[i] = new Ymap(jsonfiles[i].filename.Replace(".json", ".ymap.xml")); ymapfiles[i].CMapData.name = jsonfiles[i].filename.Replace(".json", ""); Random rnd = new Random(); List <CEntityDef> unresolved_ent = new List <CEntityDef>(); foreach (FivemEntity e in jsonfiles[i].entities) { CEntityDef ent = new CEntityDef(); ent.archetypeName = e.archetypeName; ent.flags = 0; ent.guid = (uint)rnd.Next(); ent.position = e.position; ent.rotation = e.rotation; ent.scaleXY = 1; ent.scaleZ = 1; ent.parentIndex = -1; ent.lodDist = 100; ent.childLodDist = 0; ent.lodLevel = lodLevel.LODTYPES_DEPTH_ORPHANHD; ent.numChildren = 0; ent.priorityLevel = priorityLevel.PRI_REQUIRED; ent.extensions = null; ent.ambientOcclusionMultiplier = 255; ent.artificialAmbientOcclusion = 255; ent.tintValue = 0; if (e.archetypeName.StartsWith("0x")) { unresolved_ent.Add(ent); } else { ymapfiles[i].CMapData.entities.Add(ent); } } ymapfiles[i].UpdatelodDist(ytypfiles[i].CMapTypes.archetypes); ymapfiles[i].UpdateExtents(ytypfiles[i].CMapTypes.archetypes); ytypfiles[i].WriteXML().Save(ytypfiles[i].filename); Console.WriteLine("Saved " + ytypfiles[i].filename); ymapfiles[i].WriteXML().Save(ymapfiles[i].filename); Console.WriteLine("Saved " + ymapfiles[i].filename); if (unresolved_arc?.Any() ?? false) { string unresolvedname = ytypfiles[i].CMapTypes.name + "_unresolved"; ytypfiles[i].CMapTypes.archetypes = unresolved_arc; ytypfiles[i].CMapTypes.name = unresolvedname; ytypfiles[i].WriteXML().Save(unresolvedname + ".ymap.xml"); Console.WriteLine("Saved " + unresolvedname + ".ymap.xml"); } if (unresolved_ent?.Any() ?? false) { string unresolvedname = ymapfiles[i].CMapData.name + "_unresolved"; ymapfiles[i].CMapData.entities = unresolved_ent; ymapfiles[i].CMapData.name = unresolvedname; ymapfiles[i].WriteXML().Save(unresolvedname + ".ymap.xml"); Console.WriteLine("Saved " + unresolvedname + ".ymap.xml"); } } }