Exemple #1
0
            public void SaveArmy(LuaParser.Creator LuaFile, string ArmyName)
            {
                LuaFile.AddSaveComent("");
                LuaFile.AddSaveComent(ArmyName);
                LuaFile.AddSaveComent("");

                LuaFile.AddLine(LuaParser.Write.PropertieToLua(ArmyName) + LuaParser.Write.SetValue);
                LuaFile.OpenTab(LuaParser.Write.OpenBracket);

                LuaFile.AddLine(LuaParser.Write.StringToLua(KEY_PERSONALITY, personality));
                LuaFile.AddLine(LuaParser.Write.StringToLua(KEY_PLANS, plans));
                LuaFile.AddLine(LuaParser.Write.IntToLua(KEY_COLOR, color));
                LuaFile.AddLine(LuaParser.Write.IntToLua(KEY_FACTION, faction));

                // Economy
                LuaFile.OpenTab(KEY_ECONOMY + LuaParser.Write.OpenBracketValue);
                LuaFile.AddLine(LuaParser.Write.FloatToLua(EconomyTab.KEY_MASS, Economy.mass));
                LuaFile.AddLine(LuaParser.Write.FloatToLua(EconomyTab.KEY_ENERGY, Economy.energy));
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);

                // Aliances
                LuaFile.OpenTab(KEY_ALLIANCES + LuaParser.Write.OpenBracketValue);
                for (int a = 0; a < Alliances.Count; a++)
                {
                    if (Alliances[a].ConnectedArmy == null)
                    {
                        continue;
                    }

                    LuaFile.AddLine(LuaParser.Write.StringToLua(LuaParser.Write.PropertieToLua(Alliances[a].ConnectedArmy.Name), Alliances[a].AllianceType));
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);

                // Units
                Units.SaveUnitsGroup(LuaFile);

                //Platoon Builders
                LuaFile.OpenTab(KEY_PLATOONBUILDERS + LuaParser.Write.OpenBracketValue);

                LuaFile.AddLine(LuaParser.Write.StringToLua(PlatoonBuilder.KEY_NEXTPLATOONBUILDERID, "1"));

                LuaFile.OpenTab(PlatoonBuilder.KEY_BUILDERS + LuaParser.Write.OpenBracketValue);
                for (int i = 0; i < PlatoonBuilders.Length; i++)
                {
                    PlatoonBuilders[i].SavePlatoonBuilder(LuaFile);
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);

                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);

                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
            }
        public void Save(string Path)
        {
            LuaParser.Creator LuaFile = new LuaParser.Creator();

            LuaFile.AddSaveComent("");
            LuaFile.AddSaveComent("Generated by FAF Map Editor");
            LuaFile.AddSaveComent("");

            LuaFile.AddSaveComent("");
            LuaFile.AddSaveComent("Scenario");
            LuaFile.AddSaveComent("");

            LuaFile.AddLine(KEY_Scenario + LuaParser.Write.OpenBracketValue);
            {
                LuaFile.OpenTab();
                LuaFile.AddLine(LuaParser.Write.StringToLua(Scenario.KEY_NEXTAREAID, Data.next_area_id.ToString()));

                // Props
                LuaFile.AddSaveComent("");
                LuaFile.AddSaveComent("Props");
                LuaFile.AddSaveComent("");
                LuaFile.AddLine(Scenario.KEY_PROPS + LuaParser.Write.OpenBracketValue);
                LuaFile.AddLine(LuaParser.Write.EndBracketNext);

                // Areas
                LuaFile.AddSaveComent("");
                LuaFile.AddSaveComent("Areas");
                LuaFile.AddSaveComent("");
                LuaFile.OpenTab(Scenario.KEY_AREAS + LuaParser.Write.OpenBracketValue);
                {
                    for (int a = 0; a < Data.areas.Length; a++)
                    {
                        LuaFile.OpenTab(LuaParser.Write.PropertieToLua(Data.areas[a].Name) + LuaParser.Write.OpenBracketValue);
                        LuaFile.AddLine(LuaParser.Write.RectangleToLua(LuaParser.Write.PropertieToLua(Areas.KEY_RECTANGLE), Data.areas[a].rectangle));
                        LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                    }
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);


                //Markers
                GenerateAutoMarkers();

                LuaFile.AddSaveComent("");
                LuaFile.AddSaveComent("Markers");
                LuaFile.AddSaveComent("");
                LuaFile.OpenTab(Scenario.KEY_MASTERCHAIN + LuaParser.Write.OpenBracketValue);
                {
                    for (int mc = 0; mc < Data.MasterChains.Length; mc++)
                    {
                        LuaFile.OpenTab(LuaParser.Write.PropertieToLua(Data.MasterChains[mc].Name) + LuaParser.Write.OpenBracketValue);
                        {
                            LuaFile.OpenTab(MasterChain.KEY_MARKERS + LuaParser.Write.OpenBracketValue);
                            {
                                if (Data.MasterChains[mc].Markers == null)
                                {
                                    Data.MasterChains[mc].Markers = new List <Marker>();
                                }

                                int Mcount = Data.MasterChains[mc].Markers.Count;
                                for (int m = 0; m < Mcount; m++)
                                {
                                    //LuaFile.OpenTab(LuaParser.Write.PropertiveToLua(Data.MasterChains[mc].Markers[m].Name) + LuaParser.Write.OpenBracketValue);
                                    Data.MasterChains[mc].Markers[m].SaveMarkerValues(LuaFile);
                                    //LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                                }
                            }
                            LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                        }
                        LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                    }
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);

                //Chains
                LuaFile.OpenTab(Scenario.KEY_CHAINS + LuaParser.Write.OpenBracketValue);
                {
                    for (int c = 0; c < Data.Chains.Length; c++)
                    {
                        Data.Chains[c].BakeMarkers();

                        LuaFile.OpenTab(LuaParser.Write.PropertieToLua(Data.Chains[c].Name) + LuaParser.Write.OpenBracketValue);
                        LuaFile.OpenTab(Chain.KEY_MARKERS + LuaParser.Write.OpenBracketValue);

                        for (int i = 0; i < Data.Chains[c].Markers.Length; i++)
                        {
                            LuaFile.AddLine("\"" + Data.Chains[c].Markers[i] + "\",");
                        }

                        LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                        LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                    }
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);

                LuaFile.AddLine(LuaParser.Write.StringToLua(Scenario.KEY_NEXTQUEUEID, Data.next_queue_id.ToString()));

                //Orders
                LuaFile.AddSaveComent("");
                LuaFile.AddSaveComent("Orders");
                LuaFile.AddSaveComent("");
                LuaFile.OpenTab(Scenario.KEY_ORDERS + LuaParser.Write.OpenBracketValue);
                {
                    //Leave empty
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);

                LuaFile.AddLine(LuaParser.Write.StringToLua(Scenario.KEY_NEXTPLATOONID, Data.next_platoon_id.ToString()));

                Debug.Log(Data.MasterChains[0].Markers.Count);

                //Platoons
                LuaFile.AddSaveComent("");
                LuaFile.AddSaveComent("Platoons");
                LuaFile.AddSaveComent("");
                LuaFile.OpenTab(Scenario.KEY_PLATOONS + LuaParser.Write.OpenBracketValue);
                {
                    for (int p = 0; p < Data.Platoons.Length; p++)
                    {
                        LuaFile.OpenTab(LuaParser.Write.PropertieToLua(Data.Platoons[p].Name) + LuaParser.Write.OpenBracketValue);
                        LuaFile.AddLine(LuaParser.Write.Coma + Data.Platoons[p].PlatoonName + LuaParser.Write.Coma + LuaParser.Write.NextValue);
                        LuaFile.AddLine(LuaParser.Write.Coma + Data.Platoons[p].PlatoonFunction + LuaParser.Write.Coma + LuaParser.Write.NextValue);

                        if (Data.Platoons[p].Action.Loaded)
                        {
                            string Action = LuaParser.Write.OpenBracket;
                            Action += LuaParser.Write.Coma + Data.Platoons[p].Action.Unit + LuaParser.Write.Coma + LuaParser.Write.NextValue + " ";
                            Action += Data.Platoons[p].Action.Unit.ToString() + LuaParser.Write.NextValue + " ";
                            Action += Data.Platoons[p].Action.count.ToString() + LuaParser.Write.NextValue + " ";
                            Action += LuaParser.Write.Coma + Data.Platoons[p].Action.Action + LuaParser.Write.Coma + LuaParser.Write.NextValue + " ";
                            Action += LuaParser.Write.Coma + Data.Platoons[p].Action.Formation + LuaParser.Write.Coma + LuaParser.Write.EndBracketNext + " ";
                            LuaFile.AddLine(Action);
                        }



                        LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                    }
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);


                LuaFile.AddLine(LuaParser.Write.StringToLua(Scenario.KEY_NEXTARMYID, Data.next_army_id.ToString()));
                LuaFile.AddLine(LuaParser.Write.StringToLua(Scenario.KEY_NEXTGROUPID, Data.next_group_id.ToString()));
                LuaFile.AddLine(LuaParser.Write.StringToLua(Scenario.KEY_NEXTUNITID, Data.next_unit_id.ToString()));

                //Armies
                LuaFile.AddSaveComent("");
                LuaFile.AddSaveComent("Armies");
                LuaFile.AddSaveComent("");
                LuaFile.OpenTab(Scenario.KEY_ARMIES + LuaParser.Write.OpenBracketValue);
                {
                    //for(int c = 0; c < MapLuaParser.Current.)
                    MapLuaParser.Current.ScenarioLuaFile.SaveArmys(LuaFile);

                    /*for(int a = 0; a < Data.Armies.Length; a++)
                     * {
                     *      LuaFile.AddSaveComent("");
                     *      LuaFile.AddSaveComent("Army");
                     *      LuaFile.AddSaveComent("");
                     *
                     *      LuaFile.AddLine(LuaParser.Write.PropertiveToLua(Data.Armies[a].Name) + LuaParser.Write.SetValue);
                     *      LuaFile.OpenTab(LuaParser.Write.OpenBracket);
                     *      {
                     *              Data.Armies[a].SaveArmy(LuaFile);
                     *
                     *      }
                     *      LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
                     * }*/
                }
                LuaFile.CloseTab(LuaParser.Write.EndBracketNext);
            }
            LuaFile.CloseTab(LuaParser.Write.EndBracket);



            System.IO.File.WriteAllText(Path, LuaFile.GetFileString());
        }
        public void Save(string Path)
        {
            if (!IsLoaded)
            {
                return;
            }

            ScenarioLua.ScenarioInfo ScenarioData = MapLuaParser.Current.ScenarioLuaFile.Data;

            SaveLua.Marker[] AllMarkers = MarkersControler.GetMarkers();

            LuaParser.Creator LuaFile = new LuaParser.Creator();

            LuaFile.AddSaveComent("Generated by FAF Map Editor");
            LuaFile.AddComent("Table of which resources belong to which player, it is sorted in such a way that the first line");
            LuaFile.AddComent("corresponds to player one, the second to player 2 and so on...");
            LuaFile.NextLine(1);



            int ArmyId = 0;

            // Count armies
            for (int c = 0; c < ScenarioData.Configurations.Length; c++)
            {
                for (int t = 0; t < ScenarioData.Configurations[c].Teams.Length; t++)
                {
                    for (int a = 0; a < ScenarioData.Configurations[c].Teams[t].Armys.Count; a++)
                    {
                        if (ScenarioData.Configurations[c].Teams[t].Armys[a].Data != null)
                        {
                            ArmyId++;
                        }
                    }
                }
            }

            LuaFile.AddLine("maxPlayerOnMap" + LuaParser.Write.SetValue + ArmyId);
            LuaFile.NextLine(4);

            LuaFile.AddComent("Line number is 10 + armynumber for the mexes in the table");
            int ArmyCount = ArmyId;

            Data.spawnMexArmy   = new MexArray[ArmyCount];
            Data.spawnHydroArmy = new MexArray[ArmyCount];

            ArmyId = 0;
            // Create Mass table
            for (int c = 0; c < ScenarioData.Configurations.Length; c++)
            {
                for (int t = 0; t < ScenarioData.Configurations[c].Teams.Length; t++)
                {
                    for (int a = 0; a < ScenarioData.Configurations[c].Teams[t].Armys.Count; a++)
                    {
                        if (ScenarioData.Configurations[c].Teams[t].Armys[a].Data != null)
                        {
                            List <string> MarkerArrays = new List <string>();

                            for (int m = 0; m < AllMarkers.Length; m++)
                            {
                                if (AllMarkers[m].MarkerType == SaveLua.Marker.MarkerTypes.Mass && AllMarkers[m].SpawnWithArmy.Contains(ArmyId))
                                {
                                    MarkerArrays.Add(ConvertToTableName(AllMarkers[m].Name, MexName));
                                }
                            }

                            MarkerArrays.Sort();
                            Data.spawnMexArmy[ArmyId] = new MexArray(MarkerArrays.ToArray());

                            string ValueString = CreateTableValueString(MarkerArrays);

                            if (ArmyCount >= 16 && ArmyId == ArmyCount - 1)
                            {
                                ValueString += LuaParser.Write.EndBracket;
                            }
                            else
                            {
                                ValueString += ",";
                            }

                            if (ArmyId == 0)
                            {
                                LuaFile.OpenTab("spwnMexArmy" + LuaParser.Write.OpenBracketValue + "\t\t" + ValueString, 5);
                            }
                            else
                            {
                                LuaFile.AddLine(ValueString);
                            }
                            ArmyId++;
                        }
                    }
                }
            }
            if (ArmyCount < 16)
            {
                for (int a = ArmyId; a < 16; a++)
                {
                    if (a == 15)
                    {
                        LuaFile.AddLine(LuaParser.Write.OpenBracket + LuaParser.Write.EndBracket + LuaParser.Write.EndBracket);
                    }
                    else
                    {
                        LuaFile.AddLine(LuaParser.Write.OpenBracket + LuaParser.Write.EndBracketNext);
                    }
                }
            }

            LuaFile.CloseTab(5);

            LuaFile.NextLine(3);

            LuaFile.AddComent("Line number is 30 + armynumber for the hydros in the table");


            ArmyId = 0;
            // Create Hydro table
            for (int c = 0; c < ScenarioData.Configurations.Length; c++)
            {
                for (int t = 0; t < ScenarioData.Configurations[c].Teams.Length; t++)
                {
                    for (int a = 0; a < ScenarioData.Configurations[c].Teams[t].Armys.Count; a++)
                    {
                        if (ScenarioData.Configurations[c].Teams[t].Armys[a].Data != null)
                        {
                            List <string> MarkerArrays = new List <string>();

                            for (int m = 0; m < AllMarkers.Length; m++)
                            {
                                if (AllMarkers[m].MarkerType == SaveLua.Marker.MarkerTypes.Hydrocarbon && AllMarkers[m].SpawnWithArmy.Contains(ArmyId))
                                {
                                    MarkerArrays.Add(ConvertToTableName(AllMarkers[m].Name, HydroName));
                                }
                            }
                            MarkerArrays.Sort();
                            Data.spawnHydroArmy[ArmyId] = new MexArray(MarkerArrays.ToArray());

                            string ValueString = CreateTableValueString(MarkerArrays);

                            if (ArmyCount >= 16 && ArmyId == ArmyCount - 1)
                            {
                                ValueString += LuaParser.Write.EndBracket;
                            }
                            else
                            {
                                ValueString += ",";
                            }

                            if (ArmyId == 0)
                            {
                                LuaFile.OpenTab("spwnHydroArmy" + LuaParser.Write.OpenBracketValue + "\t" + ValueString, 5);
                            }
                            else
                            {
                                LuaFile.AddLine(ValueString);
                            }
                            ArmyId++;
                        }
                    }
                }
            }

            if (ArmyCount < 16)
            {
                for (int a = ArmyId; a < 16; a++)
                {
                    if (a == 15)
                    {
                        LuaFile.AddLine(LuaParser.Write.OpenBracket + LuaParser.Write.EndBracket + LuaParser.Write.EndBracket);
                    }
                    else
                    {
                        LuaFile.AddLine(LuaParser.Write.OpenBracket + LuaParser.Write.EndBracketNext);
                    }
                }
            }

            LuaFile.CloseTab(5);

            LuaFile.NextLine(2);

            LuaFile.AddComent("RESOURCE SCALING OPTIONS");
            LuaFile.AddComent("exampleMexes = {{1,2},{3,4},{5,6}},        -- exampleMexes = {{1,2}}");
            LuaFile.AddComent("exampleMexes = {{a},{b},{c}},              -- exampleMexes = {{a}}");
            LuaFile.AddComent("option key=1 : removes a+b+c               -- option key=1 : removes a");
            LuaFile.AddComent("option key=2 : spawn a, removes b+c        -- option key=2 : spawns a");
            LuaFile.AddComent("option key=3 : spawn a+b, removes c");
            LuaFile.AddComent("option key=4 : spawn a+b+c");
            LuaFile.NextLine(1);

            int TablesCount = Data.AllTables.Count;

            for (int t = 0; t < TablesCount; t++)
            {
                string TableString = Data.AllTables[t].Key + LuaParser.Write.SetValue;


                if (!Data.AllTables[t].OneDimension)
                {
                    TableString += LuaParser.Write.OpenBracket;
                }

                for (int v = 0; v < Data.AllTables[t].Values.Length; v++)
                {
                    string TableValueKey = Data.AllTables[t].Key;
                    if (!Data.AllTables[t].OneDimension)
                    {
                        TableValueKey += "#" + (v);
                    }

                    List <string> NewMexes = new List <string>();

                    for (int m = 0; m < AllMarkers.Length; m++)
                    {
                        if (Data.AllTables[t].IsHydro && AllMarkers[m].MarkerType == SaveLua.Marker.MarkerTypes.Hydrocarbon)
                        {                         // Hydro
                            if (AllMarkers[m].AdaptiveKeys.Contains(TableValueKey))
                            {
                                NewMexes.Add(ConvertToTableName(AllMarkers[m].Name, HydroName));
                            }
                        }
                        else
                        {                         // Mass
                            if (AllMarkers[m].AdaptiveKeys.Contains(TableValueKey))
                            {
                                NewMexes.Add(ConvertToTableName(AllMarkers[m].Name, MexName));
                            }
                        }
                    }

                    NewMexes.Sort();

                    Data.AllTables[t].Values[v] = new MexArray(NewMexes.ToArray());
                    if (v > 0)
                    {
                        TableString += LuaParser.Write.NextValue;
                    }

                    TableString += CreateTableValueString(NewMexes);
                }

                if (!Data.AllTables[t].OneDimension)
                {
                    TableString += LuaParser.Write.EndBracket;
                }



                LuaFile.AddLine(TableString);
                LuaFile.NextLine();
            }

            System.IO.File.WriteAllText(Path, LuaFile.GetFileString());
        }