Esempio n. 1
0
        public static void WriteQuestLangs(DefinitionDetails definitionDetails)
        {
            string[] LangIdList        = UpdateNotifsManager.getLangIds();
            string[] DisplayList       = UpdateNotifsManager.getDispNotifs();
            int      notificationIndex = definitionDetails.progNotif;

            string entryLines = "";

            entryLines += string.Format("\n\t\t<Entry LangId=\"name_q{0}\" Color=\"5\" Value=\"{1}\" />", definitionDetails.QuestNum, definitionDetails.QuestTitle);
            entryLines += string.Format("\n\t\t<Entry LangId=\"info_q{0}\" Color=\"5\" Value=\"{1}\" />\n", definitionDetails.QuestNum, definitionDetails.QuestDesc);

            if (UpdateNotifsManager.isCustomNotification(LangIdList[notificationIndex]))
            {
                string progressId   = LangIdList[notificationIndex];
                string progressdesc = DisplayList[notificationIndex] + " [%d/%d]";

                entryLines += string.Format("\t\t<Entry LangId=\"{0}\" Color=\"5\" Value=\"{1}\" />\n", progressId, progressdesc);
            }

            string entries = string.Format("\n\t<Entries>{0}\t</Entries>\n", entryLines);

            string lngText = (string.Format("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LangFile xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" Endianess=\"BigEndian\">{0}</LangFile>", entries));

            foreach (string language in lngLanguages)
            {
                string lngPath = string.Format("Sideop_Build//Assets//tpp/pack//ui//lang//lang_default_data_{0}_fpk//Assets//tpp//lang//ui", language);
                string lngFile = Path.Combine(lngPath, string.Format(@"ih_quest_q{0}.{1}.lng2.xml", definitionDetails.QuestNum, language));

                Directory.CreateDirectory(lngPath);
                File.WriteAllText(lngFile, lngText);

                XmlCompiler.CompileFile(lngFile, XmlCompiler.LangToolPath);
                File.Delete(lngFile);
            }
        }
Esempio n. 2
0
        public static void BuildFPKDAssets(DefinitionDetails definitionDetails, QuestEntities questDetails)
        {
            string destPath = string.Format("Sideop_Build//Assets//tpp//pack//mission2//quest//ih//{0}_fpkd", definitionDetails.FpkName);

            Directory.CreateDirectory(destPath);

            string VehFPKDAssetsPath = Path.Combine(VehAssetsPath, "FPKD_Files");

            foreach (Vehicle vehicle in questDetails.vehicles)
            {
                string vehicleName   = vehicleNames[vehicle.vehicleIndex];
                string sourceDirPath = Path.Combine(VehFPKDAssetsPath, string.Format("{0}_fpkd", vehicleName));

                CopyDirectory(sourceDirPath, destPath);
            }

            string AniFPKDAssetsPath = Path.Combine(AniAssetsPath, "FPKD_Files");

            foreach (Animal animal in questDetails.animals)
            {
                string animalName    = animal.animal;
                string sourceDirPath = Path.Combine(AniFPKDAssetsPath, string.Format("{0}_fpkd", animalName));

                CopyDirectory(sourceDirPath, destPath);
            }

            string enemyFPKDAssetsPath = Path.Combine(enemyAssetsPath, "FPKD_Files");

            if (QuestComponents.EnemyInfo.zombieCount > 0)
            {
                string sourceDirPath = Path.Combine(enemyFPKDAssetsPath, "zombie_fpkd");
                CopyDirectory(sourceDirPath, destPath);
            }
        }
Esempio n. 3
0
        public static void WriteMainQuestLua(DefinitionDetails definitionDetails, QuestEntities questDetails)
        {
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

            List <string> questLua = new List <string>(questLuaInput);

            questLua[GetLineOf("local hostageCount =", questLua)] = string.Format("local hostageCount = {0}", questDetails.hostages.Count);
            questLua[GetLineOf("local CPNAME =", questLua)]       = string.Format("local CPNAME = \"{0}\"", definitionDetails.CPName);                        //add cp combobox to setup
            questLua[GetLineOf("local useInter =", questLua)]     = string.Format("local useInter = {0}", questDetails.canInter.ToString().ToLower());        //add interogation checkbox to setup
            questLua[GetLineOf("local qType =", questLua)]        = string.Format("local qType = TppDefine.QUEST_TYPE.{0}", definitionDetails.objectiveType); //add questtype combobox to setup
            questLua[GetLineOf("local SUBTYPE =", questLua)]      = string.Format("local SUBTYPE = \"{0}\"", questDetails.soldierSubType);

            string luaBool;

            if (EnemyInfo.armorCount > 0)
            {
                luaBool = "true";
            }
            else
            {
                luaBool = "false";
            }
            questLua[GetLineOf("	isQuestArmor =", questLua)] = string.Format("	isQuestArmor =  {0},", luaBool);
            if (EnemyInfo.zombieCount > 0)
            {
                luaBool = "true";
            }
            else
            {
                luaBool = "false";
            }
            questLua[GetLineOf("	isQuestZombie =", questLua)] = string.Format("	isQuestZombie = {0},", luaBool);
            if (EnemyInfo.balaCount > 0)
            {
                luaBool = "true";
            }
            else
            {
                luaBool = "false";
            }
            questLua[GetLineOf("	isQuestBalaclava =", questLua)] = string.Format("	isQuestBalaclava = {0},", luaBool);

            questLua.InsertRange(GetLineOf("    enemyList = {", questLua) + 1, BuildEnemyList(questDetails));
            questLua.InsertRange(GetLineOf("    vehicleList = {", questLua) + 1, BuildVehicleList(questDetails));
            questLua.InsertRange(GetLineOf("    hostageList = {", questLua) + 1, BuildHostageList(questDetails));
            questLua.InsertRange(GetLineOf("    animalList = {", questLua) + 1, BuildAnimalList(questDetails));
            questLua.InsertRange(GetLineOf("    targetList = {", questLua) + 1, BuildTargetList(questDetails));
            questLua.InsertRange(GetLineOf("    targetAnimalList = {", questLua) + 1, BuildAnimalTargetList(questDetails));
            questLua.InsertRange(GetLineOf("Hostage Attributes List", questLua) + 1, BuildHostageAttributes(questDetails));


            string LuaScriptPath = string.Format("Sideop_Build//Assets//tpp//pack//mission2//quest//ih//{0}_fpkd//Assets//tpp//level//mission2//quest//ih", definitionDetails.FpkName);
            string LuaScriptFile = Path.Combine(LuaScriptPath, definitionDetails.FpkName + ".lua");

            Directory.CreateDirectory(LuaScriptPath);
            File.WriteAllLines(LuaScriptFile, questLua);
        }
Esempio n. 4
0
        public static void ClearQuestFolders(DefinitionDetails definitionDetails)
        {
            string FPKPath  = string.Format("Sideop_Build//Assets//tpp//pack//mission2//quest//ih//{0}_fpk", definitionDetails.FpkName);
            string FPKDPath = string.Format("Sideop_Build//Assets//tpp//pack//mission2//quest//ih//{0}_fpkd", definitionDetails.FpkName);

            if (Directory.Exists(FPKPath))
            {
                Directory.Delete(FPKPath, true);
            }

            if (Directory.Exists(FPKDPath))
            {
                Directory.Delete(FPKDPath, true);
            }
        }
Esempio n. 5
0
        private void GoToPanel()
        {
            switch (panelNum)
            {
            case 0:
                EntitiesManager.setQuestEntities(detailPage.GetEntityLists());
                ShowSetup();
                break;

            case 1:
                if (isFilled())
                {
                    ShowWait();
                    definitionDetails = setupPage.getDefinitionDetails();

                    CP selectedCP = EnemyInfo.GetCPIndex(definitionDetails.CPName, definitionDetails.locationID);

                    EntitiesManager.InitializeEntities(selectedCP,
                                                       BuildCoords(definitionDetails.hostageCoordinates),
                                                       BuildCoords(definitionDetails.vehicleCoordinates),
                                                       BuildCoords(definitionDetails.animalCoordinates),
                                                       BuildCoords(definitionDetails.itemCoordinates),
                                                       BuildCoords(definitionDetails.activeItemCoordinates),
                                                       BuildCoords(definitionDetails.modelCoordinates));

                    detailPage.ResetAllPanels();
                    detailPage.LoadEntityLists(selectedCP, EntitiesManager.GetQuestEntities());
                    Application.DoEvents();

                    ShowDetails();
                }
                else
                {
                    MessageBox.Show("Please fill in the remaining Setup and Flavor Text fields.", "Missing Details", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    panelNum--;
                    return;
                }
                break;

            case 2:
                BuildQuest();
                MessageBox.Show("Build Complete", "Sideop Companion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                panelNum--;
                break;
            }
        }
Esempio n. 6
0
        private void BuildQuest()
        {
            definitionDetails = setupPage.getDefinitionDetails();
            questDetails      = detailPage.GetEntityLists();

            AssetsBuilder.ClearQuestFolders(definitionDetails);

            LangBuilder.WriteQuestLangs(definitionDetails);

            LuaBuilder.WriteDefinitionLua(definitionDetails, questDetails);
            LuaBuilder.WriteMainQuestLua(definitionDetails, questDetails);

            Fox2Builder.WriteItemFox2(definitionDetails, questDetails);
            Fox2Builder.WriteQuestFox2(definitionDetails, questDetails);

            AssetsBuilder.BuildFPKAssets(definitionDetails, questDetails);
            AssetsBuilder.BuildFPKDAssets(definitionDetails, questDetails);
        }
Esempio n. 7
0
        public static void BuildFPKAssets(DefinitionDetails definitionDetails, QuestEntities questDetails)
        {
            string destPath = string.Format("Sideop_Build//Assets//tpp//pack//mission2//quest//ih//{0}_fpk", definitionDetails.FpkName);

            Directory.CreateDirectory(destPath);

            string VehFPKAssetsPath = Path.Combine(VehAssetsPath, "FPK_Files");

            foreach (Vehicle vehicle in questDetails.vehicles)
            {
                string vehicleName   = vehicleNames[vehicle.vehicleIndex];
                string sourceDirPath = Path.Combine(VehFPKAssetsPath, string.Format("{0}_fpk", vehicleName));

                CopyDirectory(sourceDirPath, destPath);
            }

            string AniFPKAssetsPath = Path.Combine(AniAssetsPath, "FPK_Files");

            foreach (Animal animal in questDetails.animals)
            {
                string animalName    = animal.animal;
                string sourceDirPath = Path.Combine(AniFPKAssetsPath, string.Format("{0}_fpk", animalName));

                CopyDirectory(sourceDirPath, destPath);
            }

            destPath += "//Assets";
            if (!Directory.Exists(destPath))
            {
                Directory.CreateDirectory(destPath);
            }
            foreach (Model model in questDetails.models)
            {
                string SourcemodelFileName = Path.Combine(modelAssetsPath, model.model);
                string DestModelFileName   = Path.Combine(destPath, model.model);

                File.Copy(SourcemodelFileName + ".fmdl", DestModelFileName + ".fmdl", true);
                if (!model.missingGeom)
                {
                    File.Copy(SourcemodelFileName + ".geom", DestModelFileName + ".geom", true);
                }
            }
        }
Esempio n. 8
0
        public void setDefinitionDetails(DefinitionDetails dd)
        {
            textBoxFPKName.Text = dd.FpkName; textBoxQuestNum.Text = dd.QuestNum;
            locationID          = dd.locationID;

            if (locationID == 10)
            {
                comboBoxRegion.Text = "Afghanistan";
            }
            else if (locationID == 20)
            {
                comboBoxRegion.Text = "Central Africa";
            }
            else
            {
                comboBoxRegion.Text = "Mother Base";
            }

            comboBoxLoadArea.Text = dd.loadArea;
            textBoxXCoord.Text    = dd.coords.xCoord; textBoxYCoord.Text = dd.coords.yCoord; textBoxZCoord.Text = dd.coords.zCoord; comboBoxRadius.Text = dd.radius;
            comboBoxCategory.Text = dd.category; comboBoxReward.Text = dd.reward; comboBoxObjective.Text = dd.objectiveType;
            comboBoxCP.Text       = dd.CPName; textBoxQuestTitle.Text = dd.QuestTitle; textBoxQuestDesc.Text = dd.QuestDesc;

            if (comboBoxProgressNotifs.Items.Count <= dd.progNotif)
            {
                comboBoxProgressNotifs.SelectedIndex = 0;
            }
            else
            {
                comboBoxProgressNotifs.SelectedIndex = dd.progNotif;
            }

            textBoxHosCoords.Text        = dd.hostageCoordinates.Replace("\n", "\r\n");
            textBoxVehCoords.Text        = dd.vehicleCoordinates.Replace("\n", "\r\n");
            textBoxAnimalCoords.Text     = dd.animalCoordinates.Replace("\n", "\r\n");
            textBoxItemCoords.Text       = dd.itemCoordinates.Replace("\n", "\r\n");
            textBoxActiveItemCoords.Text = dd.activeItemCoordinates.Replace("\n", "\r\n");
            textBoxStMdCoords.Text       = dd.modelCoordinates.Replace("\n", "\r\n");
        }
        private async Task SetupDefinitionDetailsAsync()
        {
            DefinitionDetails.Clear();
            try
            {
                var lstDefs = await QueuedTask.Run <List <string> >(() =>
                {
                    Definition datasetDefinition = Dataset.DatasetDefinition;
                    List <string> lstDefDetails  = new List <string>();
                    if (datasetDefinition is TableDefinition)
                    {
                        TableDefinition tableDefinition = datasetDefinition as TableDefinition;
                        lstDefDetails.Add($"Object ID Field: {tableDefinition.GetObjectIDField()}");
                        StringBuilder stringBuilder = new StringBuilder();

                        if (!(_datastore is FileSystemDatastore))
                        {
                            lstDefDetails.Add($"Alias Name: {tableDefinition.GetAliasName()}");
                            lstDefDetails.Add($"CreatedAt Field: {tableDefinition.GetCreatedAtField()}");
                            lstDefDetails.Add($"Creator Field: {tableDefinition.GetCreatorField()}");
                            lstDefDetails.Add($"Subtype Field: {tableDefinition.GetSubtypeField()}");
                            lstDefDetails.Add($"Default Subtype Code: {tableDefinition.GetDefaultSubtypeCode()}");
                            lstDefDetails.Add($"EditedAt Field: {tableDefinition.GetEditedAtField()}");
                            lstDefDetails.Add($"Editor Field: {tableDefinition.GetEditorField()}");
                            lstDefDetails.Add($"Global ID Field: {tableDefinition.GetGlobalIDField()}");
                            lstDefDetails.Add($"Model Name: {tableDefinition.GetModelName()}");
                            foreach (var subtype in tableDefinition.GetSubtypes())
                            {
                                stringBuilder.Append(subtype.GetCode()).Append(": ").Append(subtype.GetName()).Append(Environment.NewLine);
                            }
                            lstDefDetails.Add($"Subtypes: {stringBuilder}");
                        }
                        stringBuilder = new StringBuilder();
                        foreach (Index index in tableDefinition.GetIndexes())
                        {
                            stringBuilder.Append(index.GetName()).Append(",");
                            string order = index.IsAscending() ? "Ascending" : "Descending";
                            stringBuilder.Append(order).Append(", ");
                            string unique = index.IsUnique() ? "Unique" : "Not Unique";
                            stringBuilder.Append(unique);
                        }
                        lstDefDetails.Add($"Indexes: {stringBuilder}");
                    }

                    if (datasetDefinition is FeatureClassDefinition)
                    {
                        FeatureClassDefinition featureClassDefinition = datasetDefinition as FeatureClassDefinition;
                        if (!(_datastore is FileSystemDatastore))
                        {
                            lstDefDetails.Add($"Area Field: {featureClassDefinition.GetAreaField()}");
                            lstDefDetails.Add($"Length Field: {featureClassDefinition.GetLengthField()}");
                        }
                        lstDefDetails.Add($"Shape Field: {featureClassDefinition.GetShapeField()}");
                        lstDefDetails.Add($"Shape Type: {featureClassDefinition.GetShapeType()}");
                        lstDefDetails.Add($"Spatial Reference Name: {featureClassDefinition.GetSpatialReference().Name}");
                        Envelope extent = featureClassDefinition.GetExtent();
                        lstDefDetails.Add($"Extent Details: XMin-{extent.XMin} XMax-{extent.XMax} YMin-{extent.YMin} YMax-{extent.YMax}");
                    }

                    if (datasetDefinition is FeatureDatasetDefinition)
                    {
                        FeatureDatasetDefinition featureDatasetDefinition = datasetDefinition as FeatureDatasetDefinition;
                        lstDefDetails.Add($"Spatial Reference Name: {featureDatasetDefinition.GetSpatialReference().Name}");
                        try
                        {
                            Envelope extent = featureDatasetDefinition.GetExtent();
                            lstDefDetails.Add($"Extent Details: XMin-{extent.XMin} XMax-{extent.XMax} YMin-{extent.YMin} YMax-{extent.YMax}");
                        }
                        catch (Exception)
                        {
                            lstDefDetails.Add("Could not get extent");
                        }
                    }

                    if (datasetDefinition is RelationshipClassDefinition)
                    {
                        RelationshipClassDefinition relationshipClassDefinition = datasetDefinition as RelationshipClassDefinition;
                        lstDefDetails.Add($"Alias Name: {relationshipClassDefinition.GetAliasName()}");
                        lstDefDetails.Add($"Cardinality: {relationshipClassDefinition.GetCardinality()}");
                        lstDefDetails.Add($"Origin Class: {relationshipClassDefinition.GetOriginClass()}");
                        lstDefDetails.Add($"Destination Class: {relationshipClassDefinition.GetDestinationClass()}");
                        lstDefDetails.Add($"Origin Primary Key: {relationshipClassDefinition.GetOriginKeyField()}");
                        lstDefDetails.Add($"Origin Foreign Key: {relationshipClassDefinition.GetOriginForeignKeyField()}");
                        lstDefDetails.Add($"Is Attachement?: {relationshipClassDefinition.IsAttachmentRelationship()}");
                        lstDefDetails.Add($"Is Composite Relationship?: {relationshipClassDefinition.IsComposite()}");
                    }

                    if (datasetDefinition is AttributedRelationshipClassDefinition)
                    {
                        AttributedRelationshipClassDefinition relationshipClassDefinition = datasetDefinition as AttributedRelationshipClassDefinition;
                        lstDefDetails.Add($"Destination Key: {relationshipClassDefinition.GetDestinationKeyField()}");
                        lstDefDetails.Add($"Destination Foreign Key: {relationshipClassDefinition.GetDestinationForeignKeyField()}");
                        lstDefDetails.Add($"Object ID Field: {relationshipClassDefinition.GetObjectIDField()}");
                    }
                    return(lstDefDetails);
                });

                DefinitionDetails.AddRange(lstDefs);
            }
            catch (Exception exObj)
            {
                MessageBox.Show(exObj.Message, "Error");
            }
        }
        private async Task SetupDefinitionAsync()
        {
            try
            {
                var lstDefinitions = await QueuedTask.Run <List <DatasetInfo> >(() =>
                {
                    List <DatasetInfo> definitions = new List <DatasetInfo>();
                    if (_datastore is Geodatabase)
                    {
                        var geodatabase = _datastore as Geodatabase;
                        switch (DatasetTypeCategory.DatasetType)
                        {
                        case DatasetType.Table:
                            definitions = geodatabase.GetDefinitions <TableDefinition>().Select(CreateDataSetInfo).ToList();
                            break;

                        case DatasetType.FeatureClass:
                            definitions = geodatabase.GetDefinitions <FeatureClassDefinition>().Select(CreateDataSetInfo).ToList();
                            break;

                        case DatasetType.FeatureDataset:
                            definitions = geodatabase.GetDefinitions <FeatureDatasetDefinition>().Select(CreateDataSetInfo).ToList();
                            break;

                        case DatasetType.RelationshipClass:
                            definitions = geodatabase.GetDefinitions <RelationshipClassDefinition>().Select(CreateDataSetInfo).ToList();
                            break;

                        case DatasetType.AttributedRelationshipClass:
                            definitions = geodatabase.GetDefinitions <AttributedRelationshipClassDefinition>().Select(CreateDataSetInfo).ToList();
                            break;
                        }
                    }
                    else if (_datastore is Database)
                    {
                        var database = _datastore as Database;
                        IReadOnlyList <string> tableNames = database.GetTableNames();
                        foreach (string tableName in tableNames)
                        {
                            QueryDescription queryDescription = database.GetQueryDescription(tableName);
                            TableDefinition tableDefinition   = database.GetDefinition(queryDescription);
                            if (DatasetTypeCategory.DatasetType == DatasetType.Table || DatasetTypeCategory.DatasetType == DatasetType.FeatureClass)
                            {
                                definitions.Add(new DatasetInfo
                                {
                                    Name = tableDefinition.GetName(),
                                    DatasetDefinition = tableDefinition
                                });
                            }
                        }
                    }
                    else if (_datastore is FileSystemDatastore)
                    {
                        var shapefile = _datastore as FileSystemDatastore;
                        FileSystemConnectionPath shapefileConnectionPath = (FileSystemConnectionPath)shapefile.GetConnector();
                        DirectoryInfo directoryInfo = new DirectoryInfo(shapefileConnectionPath.Path.LocalPath);

                        if (DatasetTypeCategory.DatasetType == DatasetType.FeatureClass)
                        {
                            FileInfo[] filesWithShpExtension = directoryInfo.GetFiles("*.shp");

                            foreach (FileInfo file in filesWithShpExtension)
                            {
                                definitions.Add(CreateDataSetInfo(shapefile.GetDefinition <FeatureClassDefinition>(file.Name)));
                            }
                        }
                        if (DatasetTypeCategory.DatasetType == DatasetType.Table)
                        {
                            FileInfo[] filesWithDbfExtension = directoryInfo.GetFiles("*.dbf");

                            foreach (FileInfo file in filesWithDbfExtension)
                            {
                                definitions.Add(CreateDataSetInfo(shapefile.GetDefinition <TableDefinition>(file.Name)));
                            }
                        }
                    }
                    return(definitions);
                });

                Datasets.Clear();
                Datasets.AddRange(lstDefinitions);
                DefinitionDetails.Clear();
            }
            catch (Exception exObj)
            {
                MessageBox.Show(exObj.Message, "Error");
            }
        }
Esempio n. 11
0
        public static void WriteDefinitionLua(DefinitionDetails definitionDetails, QuestEntities questDetails)
        {
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

            BodyInfoEntry bodyInfo = new BodyInfoEntry();

            if (questDetails.hostageBodyIndex >= 0)
            {
                bodyInfo = BodyInfo.BodyInfoArray[questDetails.hostageBodyIndex];
            }

            string packFiles = "";
            string locName   = "";
            string gender    = "MALE";

            if (bodyInfo.isFemale)
            {
                gender = "FEMALE";
            }

            if (definitionDetails.locationID == 10)
            {
                locName = "AFGH";
            }

            else if (definitionDetails.locationID == 20)
            {
                locName = "MAFR";
            }

            if (questDetails.hostages.Count > 0)
            {
                packFiles += "\n\t\t\"/Assets/tpp/pack/mission2/ih/ih_hostage_base.fpk\", ";
                packFiles += string.Format("\n\t\t\"{0}\", ", bodyInfo.missionPackPath);
            }

            packFiles += string.Format("\n\t\t\"/Assets/tpp/pack/mission2/quest/ih/{0}.fpk\", ", definitionDetails.FpkName);

            if (questDetails.hostages.Count > 0)
            {
                if (!bodyInfo.hasface)
                {
                    packFiles += string.Format("\n\t\trandomFaceListIH = {{gender = \"{0}\", count = {1}}}, ", gender, questDetails.hostages.Count);
                }
            }

            string bodies = "";
            string faces  = "";

            if (locName.Equals("AFGH") || locName.Equals("MAFR"))
            {
                if (EnemyInfo.balaCount > 0)
                {
                    faces += string.Format("TppDefine.QUEST_FACE_ID_LIST.{0}_BALACLAVA, ", locName);
                }
                if (EnemyInfo.armorCount > 0)
                {
                    bodies += string.Format("TppDefine.QUEST_BODY_ID_LIST.{0}_ARMOR, ", locName);
                }
            }

            foreach (string body in getEnemyBodies(questDetails.cpEnemies))
            {
                bodies += string.Format("TppEnemyBodyId.{0}, ", body);
            }
            foreach (string body in getEnemyBodies(questDetails.questEnemies))
            {
                bodies += string.Format("TppEnemyBodyId.{0}, ", body);
            }

            packFiles += string.Format("\n\t\tfaceIdList={{{0}}}, ", faces);
            packFiles += string.Format("\n\t\tbodyIdList={{{0}}}, ", bodies);

            string questPackList = string.Format("\tquestPackList = {{ {0} \n\t}},", packFiles);

            string locationInfo = string.Format("\tlocationId={0}, areaName=\"{1}\", iconPos=Vector3({2},{3},{4}), radius={5},", definitionDetails.locationID, definitionDetails.loadArea, definitionDetails.coords.xCoord, definitionDetails.coords.yCoord, definitionDetails.coords.zCoord, definitionDetails.radius);

            string progressLangId = string.Format("\tquestCompleteLangId=\"{0}\",", UpdateNotifsManager.getLangIds()[definitionDetails.progNotif]);

            string canOpenQuestFunction = "\tcanOpenQuest=InfQuest.AllwaysOpenQuest, --function that decides whether the quest is open or not";                                                                                          //todo in future update?

            string disableLzs = "\tdisableLzs={ }, --disables lzs while the quest is active. Turn on the debugMessages option and look in ih_log.txt for StartedMoveToLandingZone after calling in a support heli to find the lz name."; // todo in future update

            string equipIds = ""; List <string> requestHistory = new List <string>();

            foreach (Item item in questDetails.items)
            {
                if (item.item.Contains("EQP_WP_") && !requestHistory.Contains(item.item))
                {
                    equipIds += string.Format("\"{0}\", ", item.item);
                    requestHistory.Add(item.item);
                }
            }


            string requestEquipIds = string.Format("\trequestEquipIds={{ {0} }},", equipIds);

            string hasEnemyHeli = "\thasEnemyHeli = false, --reserves an enemy helicopter for the sideop. set to true if the sideop has a heli.";


            string DefinitionLuaPath = "Sideop_Build//GameDir//mod//quests//";
            string DefinitionLuaFile = Path.Combine(DefinitionLuaPath, string.Format("ih_quest_q{0}.lua", definitionDetails.QuestNum));

            Directory.CreateDirectory(DefinitionLuaPath);

            using (StreamWriter defFile =
                       new StreamWriter(DefinitionLuaFile))
            {
                defFile.WriteLine("local this={");
                defFile.WriteLine(questPackList);
                defFile.WriteLine(locationInfo);
                if (definitionDetails.locationID == 50)
                {
                    defFile.WriteLine(string.Format("\tclusterName=\"{0}\",", definitionDetails.loadArea.Substring(4)));
                }
                defFile.WriteLine(string.Format("\tcategory=TppQuest.QUEST_CATEGORIES_ENUM.{0},", definitionDetails.category));
                defFile.WriteLine(progressLangId);
                defFile.WriteLine(canOpenQuestFunction);
                defFile.WriteLine(string.Format("\tquestRank=TppDefine.QUEST_RANK.{0},", definitionDetails.reward));
                defFile.WriteLine(disableLzs);
                defFile.WriteLine(requestEquipIds);
                defFile.WriteLine(hasEnemyHeli);
                defFile.WriteLine("} return this");
            }
        }