Browse Source

新版9合1出怪表

WGL 3 months ago
parent
commit
2f671796f4
81 changed files with 7171 additions and 4366 deletions
  1. 154 419
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEdPopup.cs
  2. 70 131
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEditor.cs
  3. 2 3
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMap.cs
  4. 0 2
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapLayer.cs
  5. 1 2
      ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapsAsset.cs
  6. 3 3
      ActionTowerDefense/Assets/GameLevelEditor/maps.asset
  7. 6 6
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs
  8. 1 1
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs.meta
  9. 6 6
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs
  10. 1 1
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs.meta
  11. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs
  12. 1 1
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs.meta
  13. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs
  14. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs.meta
  15. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs
  16. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs.meta
  17. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs
  18. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs.meta
  19. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs
  20. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs.meta
  21. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs
  22. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs.meta
  23. 59 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs
  24. 11 0
      ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs.meta
  25. 8 12
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs
  26. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs.meta
  27. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs
  28. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs.meta
  29. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs
  30. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs.meta
  31. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs
  32. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs.meta
  33. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs
  34. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs.meta
  35. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs
  36. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs.meta
  37. 25 7
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs
  38. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs.meta
  39. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs
  40. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs.meta
  41. 131 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs
  42. 11 0
      ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs.meta
  43. 45 10
      ActionTowerDefense/Assets/Gen/Tables.cs
  44. 7 0
      ActionTowerDefense/Assets/PIDI Game Development Framework/Planar Reflections 4/Shared Assets/Amplify Shader Editor Nodes/4.0.0 - Amplify Shader Editor Nodes.unitypackage.meta
  45. 320 15
      ActionTowerDefense/Assets/Scenes/Game.unity
  46. 1 1
      ActionTowerDefense/Assets/Scripts/Characters/Enemy.cs
  47. 209 140
      ActionTowerDefense/Assets/Scripts/EnemyCreater.cs
  48. 3 2
      ActionTowerDefense/Assets/Scripts/ExcelEditor.cs
  49. 86 7
      ActionTowerDefense/Assets/Scripts/GameManager.cs
  50. 44 0
      ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs
  51. 11 0
      ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs.meta
  52. 89 31
      ActionTowerDefense/Assets/Scripts/Levels/LevelSelect.cs
  53. 115 0
      ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs
  54. 1 1
      ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs.meta
  55. 9 0
      ActionTowerDefense/Assets/Scripts/PoolManager.cs
  56. 1 1
      ActionTowerDefense/Assets/Scripts/Portal/PortalsCreater.cs
  57. 5 2
      ActionTowerDefense/Assets/Scripts/Rougue/SoldierLevelRecord.cs
  58. 2 1
      ActionTowerDefense/Assets/Scripts/Rougue/Test_LevelSetting.cs
  59. 4 0
      ActionTowerDefense/Assets/Scripts/Tower/EnemyTower.cs
  60. 0 3296
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json
  61. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy0.json
  62. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy1.json
  63. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy2.json
  64. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy3.json
  65. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy4.json
  66. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy5.json
  67. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy6.json
  68. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy7.json
  69. 494 0
      ActionTowerDefense/GenerateDatas/json/cfgcreateenemy8.json
  70. 0 265
      ActionTowerDefense/GenerateDatas/json/cfgdynamicenemy.json
  71. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表0.xlsx
  72. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表1.xlsx
  73. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表2.xlsx
  74. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表3.xlsx
  75. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表4.xlsx
  76. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表5.xlsx
  77. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表6.xlsx
  78. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表7.xlsx
  79. BIN
      ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表8.xlsx
  80. BIN
      ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx
  81. BIN
      ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx

+ 154 - 419
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEdPopup.cs

@@ -6,6 +6,7 @@ using cfg;
 using System;
 using System;
 using System.IO;
 using System.IO;
 using OfficeOpenXml;
 using OfficeOpenXml;
+using SimpleJSON;
 
 
 public class GameMapEdPopup : PopupWindowContent
 public class GameMapEdPopup : PopupWindowContent
 {
 {
@@ -80,20 +81,13 @@ public class GameMapEdPopup : PopupWindowContent
 				GameMapEditor.mapSize_w = Asset.maps[0].width;
 				GameMapEditor.mapSize_w = Asset.maps[0].width;
 				GameMapEditor.mapSize_h = Asset.maps[0].height;
 				GameMapEditor.mapSize_h = Asset.maps[0].height;
 				Asset.maps[0].expRatio = 1;
 				Asset.maps[0].expRatio = 1;
+				Asset.maps[0].levelId = Asset.levelID;
 				OnMapSelected(0);
 				OnMapSelected(0);
 			}
 			}
             else
             else
             {
             {
-				if (GameMapEditor.asset.maps[0].isDynamic)
-				{
-					SaveAsNewCreateEnemyData(true);
-				}
-				else
-				{
-					SaveAsNewCreateEnemyData(false);
-				}
-				
-            }
+				SaveAsNewCreateEnemyData();
+			}
 			editorWindow.Close();
 			editorWindow.Close();
 		}
 		}
     }
     }
@@ -107,47 +101,25 @@ public class GameMapEdPopup : PopupWindowContent
 	{
 	{
         if (isSelect)
         if (isSelect)
         {
         {
-			if(list.index + 1 >= GameMapEditor.asset.dynamicSheetStart)
-            {
-				ReloadDynamicEnemyData(list.index + 1);
-            }
-            else
-            {
-				ReloadCreateEnemyData(list.index + 1);
-			}
-
+			ReloadCreateEnemyData(list.index + 1);
+			
 			OnMapSelected(0);
 			OnMapSelected(0);
         }
         }
         else
         else
         {
         {
-            if (GameMapEditor.asset.maps[0].isDynamic)
-            {
-				SaveDynamicEnemyData(list.index + 1);
-            }
-            else
-            {
-				SaveCreateEnemyData(list.index + 1);
-			}
-        }
+			SaveCreateEnemyData(list.index + 1);
+		}
 		editorWindow.Close();
 		editorWindow.Close();
 	}
 	}
 
 
-	void SaveAsNewCreateEnemyData(bool isDynamic)
+	void SaveAsNewCreateEnemyData()
     {
     {
-		string path = "";
-        if (isDynamic)
-        {
-			path = GameMapEditor.dynamicEnemyExcelPath;
-        }
-        else
-        {
-			path = GameMapEditor.createEnemyExcelPath;
-		}
-		
+		GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
+		string path = GameMapEditor.createEnemyExcelPath + $"/出怪表{gameMap.levelId}.xlsx";
+
 		FileInfo fileInfo = new FileInfo(path);
 		FileInfo fileInfo = new FileInfo(path);
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
         {
         {
-			GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
 			// 拷贝 Sheet
 			// 拷贝 Sheet
 			ExcelWorksheet sourceSheet = package.Workbook.Worksheets[1];
 			ExcelWorksheet sourceSheet = package.Workbook.Worksheets[1];
             // 保存目标文件
             // 保存目标文件
@@ -163,27 +135,19 @@ public class GameMapEdPopup : PopupWindowContent
 				return;
 				return;
 			}
 			}
 		}
 		}
-        if (isDynamic)
-        {
-			SaveDynamicEnemyData(0, true);
-        }
-        else
-        {
-			SaveCreateEnemyData(0, true);
-		}
+		SaveCreateEnemyData(0, true);
 
 
 	}
 	}
 
 
 	void SaveCreateEnemyData(int mapIdx, bool isNew = false)
 	void SaveCreateEnemyData(int mapIdx, bool isNew = false)
 	{
 	{
-		string path = GameMapEditor.createEnemyExcelPath;
-		List<string> excelWorksheets = new();
 		GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
 		GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
+		string path = GameMapEditor.createEnemyExcelPath + $"/出怪表{gameMap.levelId}.xlsx";
 		FileInfo fileInfo = new FileInfo(path);
 		FileInfo fileInfo = new FileInfo(path);
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
 		{
 		{
 
 
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
+			List<string> excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
 			if (!isNew)
 			if (!isNew)
 			{
 			{
 				if (!ExcelEditor.RenameSheet(package, excelWorksheets[mapIdx - 1], gameMap.showIdent))
 				if (!ExcelEditor.RenameSheet(package, excelWorksheets[mapIdx - 1], gameMap.showIdent))
@@ -207,152 +171,22 @@ public class GameMapEdPopup : PopupWindowContent
 				switch (layer.waveType) 
 				switch (layer.waveType) 
 				{
 				{
 					case WaveType.Common:
 					case WaveType.Common:
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.duration.ToString());
+						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.duration.ToString());
 						idInt++;
 						idInt++;
 						break;
 						break;
 					case WaveType.FromTower:
 					case WaveType.FromTower:
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"F{cell_row}", layer.buildingId);
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"G{cell_row}", layer.buildingHp.ToString());
+						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.buildingId);
+						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"F{cell_row}", layer.buildingHp.ToString());
 						idFloat += 0.01f;
 						idFloat += 0.01f;
 						break;
 						break;
 					case WaveType.Tower:
 					case WaveType.Tower:
 						if(i == 0)
 						if(i == 0)
                         {
                         {
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", layer.duration.ToString());
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.duration.ToString());
 						}
 						}
 						break;
 						break;
 				}
 				}
 
 
-				if (layer.isDynamic)
-				{
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", layer.dynamicSheet.ToString());
-					switch (layer.waveType)
-					{
-						case WaveType.Common:
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
-							break;
-						case WaveType.Tower:
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", "0");
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
-							break;
-						case WaveType.FromTower:
-							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", $"{idFloat:F2}");
-							break;
-					}
-					cell_row++;
-                }
-                else
-                {
-					foreach (var item in layer.spawnTimes)
-					{
-						SpawnTime spawnTime = item.Value;
-						try
-						{
-							if (spawnTime.pos.Count == 0)
-							{
-								continue;
-							}
-						}
-						catch (Exception e)
-						{
-							UnityEngine.Debug.LogException(e);
-						}
-
-						switch (layer.waveType)
-						{
-							case WaveType.Common:
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
-								break;
-							case WaveType.Tower:
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", "0");
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
-								break;
-							case WaveType.FromTower:
-								ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", $"{idFloat:F2}");
-								break;
-						}
-
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"H{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
-						string posString = "";
-						for (int k = 0; k < spawnTime.pos.Count; k++)
-						{
-							int pos = spawnTime.pos[k] + 1;
-							int w = pos % GameMapEditor.mapSize_w;
-							int h = pos / GameMapEditor.mapSize_w;
-							if (w == 0)
-							{
-								posString += GameMapEditor.mapSize_w.ToString();
-								posString += ",";
-								posString += h.ToString();
-							}
-							else
-							{
-								posString += w.ToString();
-								posString += ",";
-								posString += (h + 1).ToString();
-							}
-							if (k == spawnTime.pos.Count - 1)
-							{
-								break;
-							}
-							posString += ",";
-						}
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"I{cell_row}", posString);
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"J{cell_row}", spawnTime.startTime.ToString());
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"K{cell_row}", spawnTime.endTime.ToString());
-						ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"L{cell_row}", spawnTime.num.ToString());
-						cell_row++;
-					}
-				}
-
-
-            }
-			try
-			{
-				package.Save();
-			}
-			catch (System.InvalidOperationException e)
-			{
-				EditorUtility.DisplayDialog("Error", $"出怪表未关闭或Sheet名重复,请重试", "OK");
-				UnityEngine.Debug.LogException(e);
-				return;
-			}
-
-		}
-		UnityEngine.Debug.Log($"\"{gameMap.showIdent}\"表保存完毕!");
-		UnityEngine.Debug.Log("记得运行\"gen_code_json.bat\"更新数据!");
-		ExcelEditor.RunBat();
-	}
-
-	void SaveDynamicEnemyData(int mapIdx, bool isNew = false)
-	{
-		string path = GameMapEditor.dynamicEnemyExcelPath;
-		List<string> excelWorksheets = new();
-		GameMap gameMap = GameMapEditor.asset.maps[GameMapEditor.mapIdx];
-		FileInfo fileInfo = new FileInfo(path);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-		{
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
-			if (!isNew)
-			{
-				if (!ExcelEditor.RenameSheet(package, excelWorksheets[mapIdx - 1], gameMap.showIdent))
-				{
-					return;
-				}
-			}
-			ExcelEditor.RemoveExcelRows(package, gameMap.showIdent, 10, 500);
-			ExcelEditor.ModifyExcel(package, gameMap.showIdent, "D5", GameMapEditor.mapSize_w.ToString());
-			ExcelEditor.ModifyExcel(package, gameMap.showIdent, "D6", GameMapEditor.mapSize_h.ToString());
-
-			int cell_row = 10;
-			int idInt = 0;
-			for (int i = 0; i < gameMap.layers.Length; i++)
-			{
-				GameMapLayer layer = gameMap.layers[i];
-
-				ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
-				idInt++;
-
 				foreach (var item in layer.spawnTimes)
 				foreach (var item in layer.spawnTimes)
 				{
 				{
 					SpawnTime spawnTime = item.Value;
 					SpawnTime spawnTime = item.Value;
@@ -368,8 +202,21 @@ public class GameMapEdPopup : PopupWindowContent
 						UnityEngine.Debug.LogException(e);
 						UnityEngine.Debug.LogException(e);
 					}
 					}
 
 
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"D{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
+					switch (layer.waveType)
+					{
+						case WaveType.Common:
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", idInt.ToString());
+							break;
+						case WaveType.Tower:
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", "0");
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"C{cell_row}", layer.name);
+							break;
+						case WaveType.FromTower:
+							ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"B{cell_row}", $"{idFloat:F2}");
+							break;
+					}
+
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"G{cell_row}", Asset.tileAsset.GetTile(spawnTime.id).name);
 					string posString = "";
 					string posString = "";
 					for (int k = 0; k < spawnTime.pos.Count; k++)
 					for (int k = 0; k < spawnTime.pos.Count; k++)
 					{
 					{
@@ -394,12 +241,14 @@ public class GameMapEdPopup : PopupWindowContent
 						}
 						}
 						posString += ",";
 						posString += ",";
 					}
 					}
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"E{cell_row}", posString);
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"F{cell_row}", spawnTime.startTime.ToString());
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"G{cell_row}", spawnTime.endTime.ToString());
-					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"H{cell_row}", spawnTime.num.ToString());
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"H{cell_row}", posString);
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"I{cell_row}", spawnTime.startTime.ToString());
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"J{cell_row}", spawnTime.endTime.ToString());
+					ExcelEditor.ModifyExcel(package, gameMap.showIdent, $"K{cell_row}", spawnTime.num.ToString());
 					cell_row++;
 					cell_row++;
 				}
 				}
+
+
 			}
 			}
 			try
 			try
 			{
 			{
@@ -420,267 +269,153 @@ public class GameMapEdPopup : PopupWindowContent
 
 
 	public void ReloadCreateEnemyData(int mapIdx)
 	public void ReloadCreateEnemyData(int mapIdx)
 	{
 	{
-		string path = GameMapEditor.createEnemyExcelPath;
-		ExcelEditor.RunBat();
-		List<string> excelWorksheets = new();
-		Tables allCfgData = new Tables(ExcelEditor.Loader);
-		List<SingleCreateEnemyConfig> cfgCreateEnemy = allCfgData.CfgCreateEnemy.DataList;
 		GameMap gameMap = GameMapEditor.asset.maps[0];
 		GameMap gameMap = GameMapEditor.asset.maps[0];
-		FileInfo fileInfo = new FileInfo(path);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-		{
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
-
-			//导入关卡数据
-			gameMap.ident = GameMapEditor.asset.maps[mapIdx].ident;
-			gameMap.showIdent = gameMap.ident;
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D5"), out GameMapEditor.mapSize_w);
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D6"), out GameMapEditor.mapSize_h);
-			float.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "F5"), out gameMap.expRatio);
-			gameMap.Resize(GameMapEditor.mapSize_w, GameMapEditor.mapSize_h);
-		}
+		string path = GameMapEditor.createEnemyExcelPath + $"/出怪表{Asset.levelID}.xlsx";
+		gameMap.levelId = Asset.levelID;
+        ExcelEditor.RunBat();
+        List<string> excelWorksheets = new();
+		JSONNode keyValuePairs = JSON.Parse(File.ReadAllText($"GenerateDatas/json/CfgCreateEnemy{gameMap.levelId}.json"));
+		CreateEnemyConfig createEnemyConfig = new CreateEnemyConfig(keyValuePairs);
+		List<SingleCreateEnemyConfig> cfgCreateEnemy = createEnemyConfig.DataList;
+        
+        FileInfo fileInfo = new FileInfo(path);
+        using (ExcelPackage package = new ExcelPackage(fileInfo))
+        {
+            excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
 
 
-		//导入波次数据
-		GameMapEditor.currLayer = -1;
-		int mapId = -1;
-		float id = 0;
-		ArrayUtility.Clear(ref gameMap.layers);
-		for (int i = 0; i < cfgCreateEnemy.Count; i++)
-		{
-			if (cfgCreateEnemy[i].WaveID == -1)
-			{
-				if(mapId == mapIdx - 1)
+            //导入关卡数据
+            gameMap.ident = GameMapEditor.asset.maps[mapIdx].ident;
+            gameMap.showIdent = gameMap.ident;
+            int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D5"), out GameMapEditor.mapSize_w);
+            int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "D6"), out GameMapEditor.mapSize_h);
+            float.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[mapIdx - 1], "F5"), out gameMap.expRatio);
+            gameMap.Resize(GameMapEditor.mapSize_w, GameMapEditor.mapSize_h);
+
+        }
+
+        //导入波次数据
+        GameMapEditor.currLayer = -1;
+        int mapId = -1;
+        float id = 0;
+        ArrayUtility.Clear(ref gameMap.layers);
+        for (int i = 0; i < cfgCreateEnemy.Count; i++)
+        {
+            if (cfgCreateEnemy[i].WaveID == -1)
+            {
+                if (mapId == mapIdx - 1)
                 {
                 {
-					break;
+                    break;
                 }
                 }
-				mapId++;
-				continue;
-			}
-			if(mapId == mapIdx - 1)
+                mapId++;
+                continue;
+            }
+            if (mapId == mapIdx - 1)
             {
             {
-				if (cfgCreateEnemy[i].WaveID == 0)
+                if (cfgCreateEnemy[i].WaveID == 0)
                 {
                 {
-					SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
-					ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
-					gameMap.InitLayer(gameMap.layers.Length);
-					GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-					gameMapLayer.name = singleCreateEnemyConfig.WaveName;
-					gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
-					gameMapLayer.waveType = WaveType.Tower;
-
-					ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
-				}
+                    SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
+                    ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
+                    gameMap.InitLayer(gameMap.layers.Length);
+                    GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
+                    gameMapLayer.name = singleCreateEnemyConfig.WaveName;
+                    gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
+                    gameMapLayer.waveType = WaveType.Tower;
+
+                    ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
+                }
                 else
                 else
                 {
                 {
-					
-					if (cfgCreateEnemy[i].WaveID - cfgCreateEnemy[i - 1].WaveID > 1
-					|| cfgCreateEnemy[i].WaveID < cfgCreateEnemy[i - 1].WaveID)
-					{
-						UnityEngine.Debug.Log(cfgCreateEnemy[i].WaveID);
-						UnityEngine.Debug.Log(cfgCreateEnemy[i - 1].WaveID);
-						EditorUtility.DisplayDialog("Error", $"\"{excelWorksheets[mapIdx - 1]}\"关卡第\"{cfgCreateEnemy[i].WaveID}\"波顺序有误", "OK");
-					}
-					if (cfgCreateEnemy[i].WaveID != id)
-					{
-						//波次第一行的波次数据
-						SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
-						id = cfgCreateEnemy[i].WaveID;
-						ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
-						gameMap.InitLayer(gameMap.layers.Length);
-						GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-						gameMapLayer.name = singleCreateEnemyConfig.WaveName;
-						if(cfgCreateEnemy[i].WaveID < 1)
+
+                    if (cfgCreateEnemy[i].WaveID - cfgCreateEnemy[i - 1].WaveID > 1
+                    || cfgCreateEnemy[i].WaveID < cfgCreateEnemy[i - 1].WaveID)
+                    {
+                        UnityEngine.Debug.Log(cfgCreateEnemy[i].WaveID);
+                        UnityEngine.Debug.Log(cfgCreateEnemy[i - 1].WaveID);
+                        EditorUtility.DisplayDialog("Error", $"\"{excelWorksheets[mapIdx - 1]}\"关卡第\"{cfgCreateEnemy[i].WaveID}\"波顺序有误", "OK");
+                    }
+                    if (cfgCreateEnemy[i].WaveID != id)
+                    {
+                        //波次第一行的波次数据
+                        SingleCreateEnemyConfig singleCreateEnemyConfig = cfgCreateEnemy[i];
+                        id = cfgCreateEnemy[i].WaveID;
+                        ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
+                        gameMap.InitLayer(gameMap.layers.Length);
+                        GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
+                        gameMapLayer.name = singleCreateEnemyConfig.WaveName;
+                        if (cfgCreateEnemy[i].WaveID < 1)
                         {
                         {
-							gameMapLayer.waveType = WaveType.FromTower;
-							gameMapLayer.buildingId = singleCreateEnemyConfig.BuildingID;
-							gameMapLayer.buildingHp = singleCreateEnemyConfig.BuildingHP;
-						}
+                            gameMapLayer.waveType = WaveType.FromTower;
+                            gameMapLayer.buildingId = singleCreateEnemyConfig.BuildingID;
+                            gameMapLayer.buildingHp = singleCreateEnemyConfig.BuildingHP;
+                        }
                         else
                         else
                         {
                         {
-							gameMapLayer.waveType = WaveType.Common;
-							gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
-						}
-						if(cfgCreateEnemy[i].Dynamic == 0)
-                        {
-							//波次第一行怪物数据
-							ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
-						}
-						else
-                        {
-							gameMapLayer.isDynamic = true;
-							gameMapLayer.dynamicSheet = cfgCreateEnemy[i].Dynamic;
+                            gameMapLayer.waveType = WaveType.Common;
+                            gameMapLayer.duration = singleCreateEnemyConfig.WaveTime;
                         }
                         }
-					}
-					else
-					{
-						GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
 						ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
 						ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
 					}
 					}
-				}
+                    else
+                    {
+                        GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
+                        ReloadEnemyInWave(gameMapLayer, cfgCreateEnemy[i], excelWorksheets[mapIdx - 1]);
+                    }
+                }
 
 
-			}
+            }
             else
             else
             {
             {
-				if(i == cfgCreateEnemy.Count - 1)
+                if (i == cfgCreateEnemy.Count - 1)
                 {
                 {
-					UnityEngine.Debug.LogError("请运行\"gen_code_json.bat\"更新表格数据");
+                    UnityEngine.Debug.LogError("请运行\"gen_code_json.bat\"更新表格数据");
                 }
                 }
             }
             }
-		}
-		// 标记资源为脏数据,以便保存更改
-		EditorUtility.SetDirty(GameMapEditor.asset);
-		AssetDatabase.SaveAssets();
-		UnityEngine.Debug.Log($"\"{excelWorksheets[mapIdx - 1]}\"表导入完毕!");
-	}
-
-	public void ReloadDynamicEnemyData(int mapIdx)
-	{
-		int sheetId = mapIdx - GameMapEditor.asset.dynamicSheetStart;
-		string path = GameMapEditor.dynamicEnemyExcelPath;
-		ExcelEditor.RunBat();
-		List<string> excelWorksheets = new();
-		Tables allCfgData = new Tables(ExcelEditor.Loader);
-		List<SingleDynamicEnemyConfig> cfgDynamicEnemy = allCfgData.CfgDynamicEnemy.DataList;
-		GameMap gameMap = GameMapEditor.asset.maps[0];
-		FileInfo fileInfo = new FileInfo(path);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-		{
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
-
-			//导入关卡数据
-			gameMap.ident = GameMapEditor.asset.maps[mapIdx].ident;
-			gameMap.showIdent = gameMap.ident;
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[sheetId], "D5"), out GameMapEditor.mapSize_w);
-			int.TryParse(ExcelEditor.GetCellData(package, excelWorksheets[sheetId], "D6"), out GameMapEditor.mapSize_h);
-			gameMap.Resize(GameMapEditor.mapSize_w, GameMapEditor.mapSize_h);
-			gameMap.isDynamic = true;
-		}
-
-		//导入波次数据
-		GameMapEditor.currLayer = -1;
-		int mapId = -1;
-		float id = 0;
-		ArrayUtility.Clear(ref gameMap.layers);
-		UnityEngine.Debug.Log(sheetId);
-		for (int i = 0; i < cfgDynamicEnemy.Count; i++)
-		{
-			if (cfgDynamicEnemy[i].WaveID == -1)
-			{
-				if (mapId == sheetId)
-				{
-					break;
-				}
-				mapId++;
-				continue;
-			}
-			if (mapId == sheetId)
-			{
-				
-				if (cfgDynamicEnemy[i].WaveID != id)
-				{
-					//波次第一行的波次数据
-					SingleDynamicEnemyConfig singleDynamicEnemyConfig = cfgDynamicEnemy[i];
-					id = cfgDynamicEnemy[i].WaveID;
-					ArrayUtility.Add(ref gameMap.layers, new GameMapLayer());
-					gameMap.InitLayer(gameMap.layers.Length);
-					GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-					gameMapLayer.name = singleDynamicEnemyConfig.WaveName;
-					gameMapLayer.waveType = WaveType.Common;
-					ReloadDynamicEnemy(gameMapLayer, cfgDynamicEnemy[i], excelWorksheets[sheetId]);
-				}
-				else
-				{
-					GameMapLayer gameMapLayer = gameMap.layers[gameMap.layers.Length - 1];
-					ReloadDynamicEnemy(gameMapLayer, cfgDynamicEnemy[i], excelWorksheets[sheetId]);
-				}
-
-			}
-		}
-		// 标记资源为脏数据,以便保存更改
-		EditorUtility.SetDirty(GameMapEditor.asset);
-		AssetDatabase.SaveAssets();
-		UnityEngine.Debug.Log($"\"{excelWorksheets[sheetId]}\"表导入完毕!");
-	}
+        }
+        // 标记资源为脏数据,以便保存更改
+        EditorUtility.SetDirty(GameMapEditor.asset);
+        AssetDatabase.SaveAssets();
+        UnityEngine.Debug.Log($"\"{excelWorksheets[mapIdx - 1]}\"表导入完毕!");
+    }
 
 
 
 
-	public void ReloadEnemyInWave(GameMapLayer layer, SingleCreateEnemyConfig cfgData, string SheetName)
+    public void ReloadEnemyInWave(GameMapLayer layer, SingleCreateEnemyConfig cfgData, string SheetName)
     {
     {
-		if (cfgData.EnemyName == "")
-		{
-			EditorUtility.DisplayDialog("Error", $"\"{SheetName}\"关卡\"{layer.name}\"波次中有怪物名称为空", "OK");
-			return;
-		}
-		GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
-		if (!layer.spawnTimes.ContainsKey(tile.id))
+        if (cfgData.EnemyName == "")
+        {
+            EditorUtility.DisplayDialog("Error", $"\"{SheetName}\"关卡\"{layer.name}\"波次中有怪物名称为空", "OK");
+            return;
+        }
+        GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
+        if (!layer.spawnTimes.ContainsKey(tile.id))
         {
         {
-			SpawnTime spawnTime = new();
+            SpawnTime spawnTime = new();
 
 
-			spawnTime.id = tile.id;
+            spawnTime.id = tile.id;
             if (cfgData.Position.Count % 2 != 0)
             if (cfgData.Position.Count % 2 != 0)
             {
             {
-				UnityEngine.Debug.LogError($"出怪表\"{cfgData.WaveName}\"中\"{cfgData.EnemyName}\"的Position格式错误");
+                UnityEngine.Debug.LogError($"出怪表\"{cfgData.WaveName}\"中\"{cfgData.EnemyName}\"的Position格式错误");
             }
             }
-			spawnTime.pos = new();
-			for(int i = 0; i < cfgData.Position.Count; i+=2)
+            spawnTime.pos = new();
+            for (int i = 0; i < cfgData.Position.Count; i += 2)
             {
             {
-				int x = cfgData.Position[i];
-				int y = cfgData.Position[i + 1];
-				layer.grid[(y - 1) * GameMapEditor.mapSize_w + x -1] = spawnTime.id;
-				spawnTime.pos.Add((y - 1) * GameMapEditor.mapSize_w + x - 1);
+                int x = cfgData.Position[i];
+                int y = cfgData.Position[i + 1];
+                layer.grid[(y - 1) * GameMapEditor.mapSize_w + x - 1] = spawnTime.id;
+                spawnTime.pos.Add((y - 1) * GameMapEditor.mapSize_w + x - 1);
             }
             }
-			spawnTime.startTime = cfgData.StartTime;
-			spawnTime.endTime = cfgData.EndTime;
-			spawnTime.num = cfgData.Count;
-			spawnTime.Hp = cfgData.HPRatio;
-			spawnTime.moveSpeed = cfgData.SpeedRatio;
-			spawnTime.attack = cfgData.AttackRatio;
-
-			layer.spawnTimes.Add(tile.id,spawnTime);
+            spawnTime.startTime = cfgData.StartTime;
+            spawnTime.endTime = cfgData.EndTime;
+            spawnTime.num = cfgData.Count;
+            spawnTime.Hp = cfgData.HPRatio;
+            spawnTime.moveSpeed = cfgData.SpeedRatio;
+            spawnTime.attack = cfgData.AttackRatio;
+
+            layer.spawnTimes.Add(tile.id, spawnTime);
         }
         }
         else
         else
         {
         {
-			UnityEngine.Debug.LogError($"\"{layer.name}\"波次中\"{cfgData.EnemyName}\"重复");
+            UnityEngine.Debug.LogError($"\"{layer.name}\"波次中\"{cfgData.EnemyName}\"重复");
         }
         }
     }
     }
-
-	public void ReloadDynamicEnemy(GameMapLayer layer, SingleDynamicEnemyConfig cfgData, string SheetName)
-	{
-		if (cfgData.EnemyName == "")
-		{
-			EditorUtility.DisplayDialog("Error", $"\"{SheetName}\"关卡\"{layer.name}\"波次中有怪物名称为空", "OK");
-			return;
-		}
-		GameMapTile tile = GameMapEditor.asset.tileAsset.tiles.Find(x => x.name == cfgData.EnemyName);
-		if (!layer.spawnTimes.ContainsKey(tile.id))
-		{
-			SpawnTime spawnTime = new();
-
-			spawnTime.id = tile.id;
-			if (cfgData.Position.Count % 2 != 0)
-			{
-				UnityEngine.Debug.LogError($"出怪表\"{cfgData.WaveName}\"中\"{cfgData.EnemyName}\"的Position格式错误");
-			}
-			spawnTime.pos = new();
-			for (int i = 0; i < cfgData.Position.Count; i += 2)
-			{
-				int x = cfgData.Position[i];
-				int y = cfgData.Position[i + 1];
-				layer.grid[(y - 1) * GameMapEditor.mapSize_w + x - 1] = spawnTime.id;
-				spawnTime.pos.Add((y - 1) * GameMapEditor.mapSize_w + x - 1);
-			}
-			spawnTime.startTime = cfgData.StartTime;
-			spawnTime.endTime = cfgData.EndTime;
-			spawnTime.num = cfgData.Count;
-			spawnTime.Hp = cfgData.HPRatio;
-			spawnTime.moveSpeed = cfgData.SpeedRatio;
-			spawnTime.attack = cfgData.AttackRatio;
-
-			layer.spawnTimes.Add(tile.id, spawnTime);
-		}
-		else
-		{
-			UnityEngine.Debug.LogError($"\"{layer.name}\"波次中\"{cfgData.EnemyName}\"重复");
-		}
-	}
-	// ----------------------------------------------------------------------------------------------------------------
+    // ----------------------------------------------------------------------------------------------------------------
 }
 }

+ 70 - 131
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/Editor/GameMapEditor.cs

@@ -6,6 +6,7 @@ using UnityEditor;
 using cfg;
 using cfg;
 using System.IO;
 using System.IO;
 using OfficeOpenXml;
 using OfficeOpenXml;
+using SimpleJSON;
 
 
 public class GameMapEditor : EditorWindow
 public class GameMapEditor : EditorWindow
 {
 {
@@ -137,8 +138,7 @@ public class GameMapEditor : EditorWindow
 	private static readonly GUIContent GC_EditAuto = new GUIContent("Setup Auto-tile");
 	private static readonly GUIContent GC_EditAuto = new GUIContent("Setup Auto-tile");
     private static readonly GUIContent GC_Viz = new GUIContent("*", "Toggle layer visblity in editor");
     private static readonly GUIContent GC_Viz = new GUIContent("*", "Toggle layer visblity in editor");
 
 
-	public static string createEnemyExcelPath = "Luban/Config/Datas/出怪表.xlsx";
-	public static string dynamicEnemyExcelPath = "Luban/Config/Datas/动态出怪表.xlsx";
+	public static string createEnemyExcelPath = "Luban/Config/Datas/EnemyCreater";
 	public static string enemyExcelPath = "Luban/Config/Datas/怪物表.xlsx";
 	public static string enemyExcelPath = "Luban/Config/Datas/怪物表.xlsx";
 
 
     private GenericMenu addTileMenu = null;
     private GenericMenu addTileMenu = null;
@@ -629,30 +629,37 @@ public class GameMapEditor : EditorWindow
 		GUILayout.Box(GUIContent.none, GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.Height(3f));
 		GUILayout.Box(GUIContent.none, GUI.skin.box, GUILayout.ExpandWidth(true), GUILayout.Height(3f));
 		Rect r = EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true));
 		Rect r = EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true));
 		{
 		{
-			// map selection button
-			r.height = EditorGUIUtility.singleLineHeight;
-			r.x = r.xMax - 200f; r.width = 100f; r.height = 15f;
-            if (GUI.Button(r, GC_ExcelSave))
-            {
-				ReloadSheetName(createEnemyExcelPath,dynamicEnemyExcelPath,true);
-				mapsPopup.Asset = asset;
-				mapsPopup.isSelect = false;
-				mapsPopup.OnMapSelected = OnMapSelected;
-				PopupWindow.Show(r, mapsPopup);
-			}
-			r.x = r.xMax; r.width = 100f; r.height = 15f;
-			if (GUI.Button(r, GC_MapSelect))
-            {
-				ReloadSheetName(createEnemyExcelPath, dynamicEnemyExcelPath);
-				mapsPopup.Asset = asset;
-				mapsPopup.isSelect = true;
-				mapsPopup.OnMapSelected = OnMapSelected;
-				PopupWindow.Show(r, mapsPopup);
+			EditorGUI.BeginChangeCheck();
+			EditorGUILayout.BeginHorizontal();
+			{
+				showMapProperties = EditorGUILayout.Foldout(showMapProperties, GC_MapHead, true);
+
+				asset.levelID = EditorGUILayout.IntField(asset.levelID, GUILayout.Width(15));
+
+				r.height = EditorGUIUtility.singleLineHeight;
+
+				r.x = r.xMax - 200f; r.width = 100f; r.height = 15f;
+				if (GUILayout.Button(GC_ExcelSave, GUILayout.Width(70)))
+				{
+					ReloadSheetName(createEnemyExcelPath, true);
+					mapsPopup.Asset = asset;
+					mapsPopup.isSelect = false;
+					mapsPopup.OnMapSelected = OnMapSelected;
+					PopupWindow.Show(r, mapsPopup);
+				}
+				r.x = r.xMax; r.width = 100f; r.height = 15f;
+				if (GUILayout.Button(GC_MapSelect, GUILayout.Width(75)))
+				{
+					ReloadSheetName(createEnemyExcelPath);
+					mapsPopup.Asset = asset;
+					mapsPopup.isSelect = true;
+					mapsPopup.OnMapSelected = OnMapSelected;
+					PopupWindow.Show(r, mapsPopup);
+				}
+				
 			}
 			}
+			EditorGUILayout.EndHorizontal();
 
 
-			// the active map's properties
-			EditorGUI.BeginChangeCheck();
-			showMapProperties = EditorGUILayout.Foldout(showMapProperties, GC_MapHead, true);
 			if (EditorGUI.EndChangeCheck()) EditorPrefs.SetBool("plyGameMapEd.showMapProps", showMapProperties);
 			if (EditorGUI.EndChangeCheck()) EditorPrefs.SetBool("plyGameMapEd.showMapProps", showMapProperties);
 
 
 			if (showMapProperties)
 			if (showMapProperties)
@@ -712,71 +719,31 @@ public class GameMapEditor : EditorWindow
 		EditorGUILayout.EndVertical();
 		EditorGUILayout.EndVertical();
 	}
 	}
 
 
-	void ReloadSheetName(string path1, string path2, bool isSave = false)
+	void ReloadSheetName(string path1, bool isSave = false)
     {
     {
-		List<string> excelWorksheets = new();
-		List<string> excelWorksheets1 = new();
-		FileInfo fileInfo = new FileInfo(path1);
-		using (ExcelPackage package = new ExcelPackage(fileInfo))
-        {
-			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
+		for (int i = asset.maps.Count - 1; i > 0; i--)
+		{
+			asset.RemoveMapAtIndex(i);
 		}
 		}
-		fileInfo = new FileInfo(path2);
+		string path;
+		path = path1 + $"/出怪表{asset.levelID}.xlsx";
+		List<string> excelWorksheets = new();
+		FileInfo fileInfo = new FileInfo(path);
+
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
 		using (ExcelPackage package = new ExcelPackage(fileInfo))
 		{
 		{
-			excelWorksheets1 = ExcelEditor.ReadExcelSheetsInfo(package);
+			excelWorksheets = ExcelEditor.ReadExcelSheetsInfo(package);
 		}
 		}
-		Tables allCfgData = new Tables(ExcelEditor.Loader);
-		List<SingleCreateEnemyConfig> cfgCreateEnemy = allCfgData.CfgCreateEnemy.DataList;
 		//导入关卡数据
 		//导入关卡数据
 		mapIdx = 0;
 		mapIdx = 0;
-		for (int i = asset.maps.Count - 1; i > 0; i--)
+
+		for (int j = 1; j < excelWorksheets.Count + 1; j++)
 		{
 		{
-			asset.RemoveMapAtIndex(i);
-		}
-		asset.dynamicSheetStart = excelWorksheets.Count + 1;
-		if (isSave)
-        {
-            if (asset.maps[0].isDynamic)
-            {
-				for (int i = 1; i < excelWorksheets1.Count + 1; i++)
-				{
-					if (i >= asset.maps.Count)
-					{
-						asset.AddMap();
-					}
-					asset.maps[i].ident = excelWorksheets1[i - 1];
-				}
-			}else
-            {
-				for (int i = 1; i < excelWorksheets.Count + 1; i++)
-				{
-					if (i >= asset.maps.Count)
-					{
-						asset.AddMap();
-					}
-					asset.maps[i].ident = excelWorksheets[i - 1];
-				}
-			}
-        }
-        else
-        {
-			for (int i = 1; i < excelWorksheets.Count + 1; i++)
-			{
-				if (i >= asset.maps.Count)
-				{
-					asset.AddMap();
-				}
-				asset.maps[i].ident = excelWorksheets[i - 1];
-			}
-			for (int i = asset.dynamicSheetStart; i < asset.dynamicSheetStart + excelWorksheets1.Count; i++)
+			if (j >= asset.maps.Count)
 			{
 			{
-				if (i >= asset.maps.Count)
-				{
-					asset.AddMap();
-				}
-				asset.maps[i].ident = excelWorksheets1[i - asset.dynamicSheetStart];
+				asset.AddMap();
 			}
 			}
+			asset.maps[j].ident = excelWorksheets[j - 1];
 		}
 		}
 	}
 	}
 
 
@@ -998,33 +965,23 @@ public class GameMapEditor : EditorWindow
 		};
 		};
 		int selectedIndex = (int)layer.waveType;
 		int selectedIndex = (int)layer.waveType;
 		WaveType waveType = WaveType.Common;
 		WaveType waveType = WaveType.Common;
-		bool isDynamic = layer.isDynamic;
-		int dynamicSheet = 0;
-		if (!asset.maps[mapIdx].isDynamic)
-        {
-			selectedIndex = EditorGUILayout.Popup("种类", selectedIndex, options);
-			waveType = (WaveType)selectedIndex;
-			switch (layer.waveType)
-			{
-				case WaveType.Common:
+		selectedIndex = EditorGUILayout.Popup("种类", selectedIndex, options);
+		waveType = (WaveType)selectedIndex;
+		switch (waveType)
+		{
+			case WaveType.Common:
+				duration = EditorGUILayout.IntField("下一波时间", layer.duration);
+				break;
+			case WaveType.Tower:
+				if (currLayer == 0)
+				{
 					duration = EditorGUILayout.IntField("下一波时间", layer.duration);
 					duration = EditorGUILayout.IntField("下一波时间", layer.duration);
-					break;
-				case WaveType.Tower:
-					if (currLayer == 0)
-					{
-						duration = EditorGUILayout.IntField("下一波时间", layer.duration);
-					}
-					break;
-				case WaveType.FromTower:
-					buildingId = EditorGUILayout.TextField("出怪建筑", layer.buildingId);
-					buildingHp = EditorGUILayout.FloatField("剩余血量", layer.buildingHp);
-					break;
-			}
-			isDynamic = EditorGUILayout.ToggleLeft("动态", layer.isDynamic);
-			if (isDynamic)
-			{
-				dynamicSheet = EditorGUILayout.IntField("动态表", layer.dynamicSheet);
-			}
+				}
+				break;
+			case WaveType.FromTower:
+				buildingId = EditorGUILayout.TextField("出怪建筑", layer.buildingId);
+				buildingHp = EditorGUILayout.FloatField("剩余血量", layer.buildingHp);
+				break;
 		}
 		}
 
 
 
 
@@ -1107,8 +1064,6 @@ public class GameMapEditor : EditorWindow
 			layer.buildingHp = buildingHp;
 			layer.buildingHp = buildingHp;
 			layer.spawnTimes = newSpawnTimes;
 			layer.spawnTimes = newSpawnTimes;
 			layer.waveType = waveType;
 			layer.waveType = waveType;
-			layer.isDynamic = isDynamic;
-			layer.dynamicSheet = dynamicSheet;
 			AssetDatabase.SaveAssets();
 			AssetDatabase.SaveAssets();
 		}
 		}
 		// 标记资源为脏数据,以便保存更改
 		// 标记资源为脏数据,以便保存更改
@@ -1350,33 +1305,25 @@ public class GameMapEditor : EditorWindow
 		string path = enemyExcelPath;
 		string path = enemyExcelPath;
 		List<string> excelsSheets = new();
 		List<string> excelsSheets = new();
 		FileInfo fileInfo = null;
 		FileInfo fileInfo = null;
-		for (int j = 0; j < 2; j++)
+		for (int i = 0; i < 9; i++)
         {
         {
-            switch (j)
-            {
-				case 0:
-					fileInfo = new FileInfo(createEnemyExcelPath);
-					break;
-				case 1:
-					fileInfo = new FileInfo(dynamicEnemyExcelPath);
-					break;
-            }
+			fileInfo = new FileInfo(createEnemyExcelPath + $"/怪物表{i}.xlsx");
 			using (ExcelPackage package = new ExcelPackage(fileInfo))
 			using (ExcelPackage package = new ExcelPackage(fileInfo))
 			{
 			{
 				excelsSheets = ExcelEditor.ReadExcelSheetsInfo(package);
 				excelsSheets = ExcelEditor.ReadExcelSheetsInfo(package);
-				for (int i = 0; i < asset.tileAsset.tiles.Count; i++)
+				for (int j = 0; j < asset.tileAsset.tiles.Count; j++)
 				{
 				{
-					GameMapTile tile = asset.tileAsset.tiles[i];
+					GameMapTile tile = asset.tileAsset.tiles[j];
 					foreach (var sheetName in excelsSheets)
 					foreach (var sheetName in excelsSheets)
 					{
 					{
-						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + i, tile.name);
+						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + j, tile.name);
 					}
 					}
 				}
 				}
-				for (int i = 0; i < 100; i++)
+				for (int j = 0; j < 100; j++)
 				{
 				{
 					foreach (var sheetName in excelsSheets)
 					foreach (var sheetName in excelsSheets)
 					{
 					{
-						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + asset.tileAsset.tiles.Count + i, "");
+						ExcelEditor.ModifyExcel(package, sheetName, 7, 3 + asset.tileAsset.tiles.Count + j, "");
 					}
 					}
 				}
 				}
 				try
 				try
@@ -1385,15 +1332,7 @@ public class GameMapEditor : EditorWindow
 				}
 				}
 				catch (System.InvalidOperationException e)
 				catch (System.InvalidOperationException e)
 				{
 				{
-                    switch (j)
-                    {
-						case 0:
-							Debug.LogError($"出怪表未关闭请重试");
-							break;
-						case 1:
-							Debug.LogError($"动态出怪表未关闭请重试");
-							break;
-                    }
+					Debug.LogError($"出怪表未关闭请重试");
 					Debug.LogException(e);
 					Debug.LogException(e);
 					return;
 					return;
 				}
 				}

+ 2 - 3
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMap.cs

@@ -19,8 +19,7 @@ public class GameMap
 
 
 	/// <summary> height of map (determines how big grid is) </summary>
 	/// <summary> height of map (determines how big grid is) </summary>
 	public int height;
 	public int height;
-
-	public bool isDynamic;
+	public int levelId;
 	public float expRatio;
 	public float expRatio;
 	/// <summary> The grid/map. -1 is an empty tile, else a value related to GameMapTile.id will be present 
 	/// <summary> The grid/map. -1 is an empty tile, else a value related to GameMapTile.id will be present 
     /// This is also known as layer-0 or the default layer when there are movethan one layer in the map.
     /// This is also known as layer-0 or the default layer when there are movethan one layer in the map.
@@ -196,7 +195,7 @@ public class GameMap
 
 
 	public override string ToString()
 	public override string ToString()
 	{
 	{
-		return ident;
+		return  ident;
 	}
 	}
 
 
 	// ----------------------------------------------------------------------------------------------------------------
 	// ----------------------------------------------------------------------------------------------------------------

+ 0 - 2
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapLayer.cs

@@ -38,7 +38,5 @@ public class GameMapLayer
 	public string name;
 	public string name;
 	public Dictionary<int, SpawnTime> spawnTimes = new();
 	public Dictionary<int, SpawnTime> spawnTimes = new();
 	public WaveType waveType;
 	public WaveType waveType;
-	public bool isDynamic;
-	public int dynamicSheet;
 	// ----------------------------------------------------------------------------------------------------------------
 	// ----------------------------------------------------------------------------------------------------------------
 }
 }

+ 1 - 2
ActionTowerDefense/Assets/GameLevelEditor/GameMap/CoreScripts/GameMapsAsset.cs

@@ -6,10 +6,9 @@ public class GameMapsAsset : ScriptableObject
 {
 {
 	/// <summary> All maps created via MapEditor </summary>	
 	/// <summary> All maps created via MapEditor </summary>	
 	[SerializeField] public List<GameMap> maps = new List<GameMap>();
 	[SerializeField] public List<GameMap> maps = new List<GameMap>();
-	[DisplayOnly]public int dynamicSheetStart;
 	/// <summary> The tiles asset associated with the maps </summary>	
 	/// <summary> The tiles asset associated with the maps </summary>	
 	[SerializeField] public GameMapTilesAsset tileAsset;
 	[SerializeField] public GameMapTilesAsset tileAsset;
-
+	[HideInInspector] public int levelID;
 	//[SerializeField] private int nextMapId = 1;
 	//[SerializeField] private int nextMapId = 1;
 
 
 	// *** extra properties related to this maps asset
 	// *** extra properties related to this maps asset

File diff suppressed because it is too large
+ 3 - 3
ActionTowerDefense/Assets/GameLevelEditor/maps.asset


+ 6 - 6
ActionTowerDefense/Assets/Gen/CfgDynamicEnemy.cs → ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs

@@ -14,24 +14,24 @@ using SimpleJSON;
 namespace cfg
 namespace cfg
 { 
 { 
 
 
-public sealed partial class CfgDynamicEnemy
+public sealed partial class CfgCreateEnemy0
 {
 {
-    private readonly List<SingleDynamicEnemyConfig> _dataList;
+    private readonly List<SingleCreateEnemy0Config> _dataList;
     
     
 
 
-    public CfgDynamicEnemy(JSONNode _json)
+    public CfgCreateEnemy0(JSONNode _json)
     {
     {
-        _dataList = new List<SingleDynamicEnemyConfig>();
+        _dataList = new List<SingleCreateEnemy0Config>();
         
         
         foreach(JSONNode _row in _json.Children)
         foreach(JSONNode _row in _json.Children)
         {
         {
-            var _v = SingleDynamicEnemyConfig.DeserializeSingleDynamicEnemyConfig(_row);
+            var _v = SingleCreateEnemy0Config.DeserializeSingleCreateEnemy0Config(_row);
             _dataList.Add(_v);
             _dataList.Add(_v);
         }
         }
         PostInit();
         PostInit();
     }
     }
 
 
-    public List<SingleDynamicEnemyConfig> DataList => _dataList;
+    public List<SingleCreateEnemy0Config> DataList => _dataList;
 
 
 
 
     public void Resolve(Dictionary<string, object> _tables)
     public void Resolve(Dictionary<string, object> _tables)

+ 1 - 1
ActionTowerDefense/Assets/Gen/SingleDynamicEnemyConfig.cs.meta → ActionTowerDefense/Assets/Gen/CfgCreateEnemy0.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
 fileFormatVersion: 2
-guid: 95a8caa39cf245a4a86d9e132bd42ae9
+guid: 93ab35fa0f2477343bd0b07a078515b1
 MonoImporter:
 MonoImporter:
   externalObjects: {}
   externalObjects: {}
   serializedVersion: 2
   serializedVersion: 2

+ 6 - 6
ActionTowerDefense/Assets/Gen/CfgCreateEnemy.cs → ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs

@@ -14,24 +14,24 @@ using SimpleJSON;
 namespace cfg
 namespace cfg
 { 
 { 
 
 
-public sealed partial class CfgCreateEnemy
+public sealed partial class CfgCreateEnemy1
 {
 {
-    private readonly List<SingleCreateEnemyConfig> _dataList;
+    private readonly List<SingleCreateEnemy1Config> _dataList;
     
     
 
 
-    public CfgCreateEnemy(JSONNode _json)
+    public CfgCreateEnemy1(JSONNode _json)
     {
     {
-        _dataList = new List<SingleCreateEnemyConfig>();
+        _dataList = new List<SingleCreateEnemy1Config>();
         
         
         foreach(JSONNode _row in _json.Children)
         foreach(JSONNode _row in _json.Children)
         {
         {
-            var _v = SingleCreateEnemyConfig.DeserializeSingleCreateEnemyConfig(_row);
+            var _v = SingleCreateEnemy1Config.DeserializeSingleCreateEnemy1Config(_row);
             _dataList.Add(_v);
             _dataList.Add(_v);
         }
         }
         PostInit();
         PostInit();
     }
     }
 
 
-    public List<SingleCreateEnemyConfig> DataList => _dataList;
+    public List<SingleCreateEnemy1Config> DataList => _dataList;
 
 
 
 
     public void Resolve(Dictionary<string, object> _tables)
     public void Resolve(Dictionary<string, object> _tables)

+ 1 - 1
ActionTowerDefense/Assets/Gen/CfgCreateEnemy.cs.meta → ActionTowerDefense/Assets/Gen/CfgCreateEnemy1.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
 fileFormatVersion: 2
-guid: a3e8402db9a2bce4a9b46554fb2c30c1
+guid: 51db6e1ac9a296043895a19f181d2084
 MonoImporter:
 MonoImporter:
   externalObjects: {}
   externalObjects: {}
   serializedVersion: 2
   serializedVersion: 2

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy2
+{
+    private readonly List<SingleCreateEnemy2Config> _dataList;
+    
+
+    public CfgCreateEnemy2(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy2Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy2Config.DeserializeSingleCreateEnemy2Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy2Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 1 - 1
ActionTowerDefense/Assets/Gen/CfgDynamicEnemy.cs.meta → ActionTowerDefense/Assets/Gen/CfgCreateEnemy2.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
 fileFormatVersion: 2
-guid: bc2b87c48bddd4b418bbf4e0d7e2c473
+guid: f3301952fb917be48be724d5006b89af
 MonoImporter:
 MonoImporter:
   externalObjects: {}
   externalObjects: {}
   serializedVersion: 2
   serializedVersion: 2

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy3
+{
+    private readonly List<SingleCreateEnemy3Config> _dataList;
+    
+
+    public CfgCreateEnemy3(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy3Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy3Config.DeserializeSingleCreateEnemy3Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy3Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy3.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 64daadb0b1f008545b656fc30aa1c353
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy4
+{
+    private readonly List<SingleCreateEnemy4Config> _dataList;
+    
+
+    public CfgCreateEnemy4(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy4Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy4Config.DeserializeSingleCreateEnemy4Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy4Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy4.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b07d4ced9f68f7a43b6ab9a42addc156
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy5
+{
+    private readonly List<SingleCreateEnemy5Config> _dataList;
+    
+
+    public CfgCreateEnemy5(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy5Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy5Config.DeserializeSingleCreateEnemy5Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy5Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy5.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 76921c9802f6d1f49b33375dd8d98b01
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy6
+{
+    private readonly List<SingleCreateEnemy6Config> _dataList;
+    
+
+    public CfgCreateEnemy6(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy6Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy6Config.DeserializeSingleCreateEnemy6Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy6Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy6.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f811d4641a20ef94ca9ee93b547329b3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy7
+{
+    private readonly List<SingleCreateEnemy7Config> _dataList;
+    
+
+    public CfgCreateEnemy7(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy7Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy7Config.DeserializeSingleCreateEnemy7Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy7Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy7.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dc4d8fd74502fdb4ca054fefe50e7f0a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 59 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs

@@ -0,0 +1,59 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class CfgCreateEnemy8
+{
+    private readonly List<SingleCreateEnemy8Config> _dataList;
+    
+
+    public CfgCreateEnemy8(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemy8Config>();
+        
+        foreach(JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemy8Config.DeserializeSingleCreateEnemy8Config(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemy8Config> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach(var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach(var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/CfgCreateEnemy8.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cb69602c10f028445a7ad5f79218e88a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 12
ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs → ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs

@@ -14,13 +14,12 @@ using SimpleJSON;
 namespace cfg
 namespace cfg
 { 
 { 
 
 
-public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase 
+public sealed partial class SingleCreateEnemy0Config :  Bright.Config.BeanBase 
 {
 {
-    public SingleCreateEnemyConfig(JSONNode _json) 
+    public SingleCreateEnemy0Config(JSONNode _json) 
     {
     {
         { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
         { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
         { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
         { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
-        { if(!_json["Dynamic"].IsNumber) { throw new SerializationException(); }  Dynamic = _json["Dynamic"]; }
         { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
         { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
         { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
         { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
         { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
         { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
@@ -37,11 +36,10 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         PostInit();
         PostInit();
     }
     }
 
 
-    public SingleCreateEnemyConfig(float WaveID, string WaveName, int Dynamic, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    public SingleCreateEnemy0Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
     {
     {
         this.WaveID = WaveID;
         this.WaveID = WaveID;
         this.WaveName = WaveName;
         this.WaveName = WaveName;
-        this.Dynamic = Dynamic;
         this.WaveTime = WaveTime;
         this.WaveTime = WaveTime;
         this.BuildingID = BuildingID;
         this.BuildingID = BuildingID;
         this.BuildingHP = BuildingHP;
         this.BuildingHP = BuildingHP;
@@ -58,9 +56,9 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         PostInit();
         PostInit();
     }
     }
 
 
-    public static SingleCreateEnemyConfig DeserializeSingleCreateEnemyConfig(JSONNode _json)
+    public static SingleCreateEnemy0Config DeserializeSingleCreateEnemy0Config(JSONNode _json)
     {
     {
-        return new SingleCreateEnemyConfig(_json);
+        return new SingleCreateEnemy0Config(_json);
     }
     }
 
 
     /// <summary>
     /// <summary>
@@ -74,15 +72,14 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
     /// <summary>
     /// <summary>
     /// 140
     /// 140
     /// </summary>
     /// </summary>
-    public int Dynamic { get; private set; }
+    public int WaveTime { get; private set; }
     /// <summary>
     /// <summary>
     /// 经验倍率:
     /// 经验倍率:
     /// </summary>
     /// </summary>
-    public int WaveTime { get; private set; }
+    public string BuildingID { get; private set; }
     /// <summary>
     /// <summary>
     /// 1
     /// 1
     /// </summary>
     /// </summary>
-    public string BuildingID { get; private set; }
     public float BuildingHP { get; private set; }
     public float BuildingHP { get; private set; }
     public string EnemyName { get; private set; }
     public string EnemyName { get; private set; }
     public System.Collections.Generic.List<int> Position { get; private set; }
     public System.Collections.Generic.List<int> Position { get; private set; }
@@ -95,7 +92,7 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
     public float ArmorRatio { get; private set; }
     public float ArmorRatio { get; private set; }
     public float ArmorPiercingRatio { get; private set; }
     public float ArmorPiercingRatio { get; private set; }
 
 
-    public const int __ID__ = 691467974;
+    public const int __ID__ = -980553554;
     public override int GetTypeId() => __ID__;
     public override int GetTypeId() => __ID__;
 
 
     public  void Resolve(Dictionary<string, object> _tables)
     public  void Resolve(Dictionary<string, object> _tables)
@@ -112,7 +109,6 @@ public sealed partial class SingleCreateEnemyConfig :  Bright.Config.BeanBase
         return "{ "
         return "{ "
         + "WaveID:" + WaveID + ","
         + "WaveID:" + WaveID + ","
         + "WaveName:" + WaveName + ","
         + "WaveName:" + WaveName + ","
-        + "Dynamic:" + Dynamic + ","
         + "WaveTime:" + WaveTime + ","
         + "WaveTime:" + WaveTime + ","
         + "BuildingID:" + BuildingID + ","
         + "BuildingID:" + BuildingID + ","
         + "BuildingHP:" + BuildingHP + ","
         + "BuildingHP:" + BuildingHP + ","

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy0Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 791dbec7b32c65743bbe41f2a6c16e0d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy1Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy1Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy1Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy1Config DeserializeSingleCreateEnemy1Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy1Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -93049873;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy1Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8f4d43752aadf7849bbed502904c5e19
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy2Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy2Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy2Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy2Config DeserializeSingleCreateEnemy2Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy2Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 794453808;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy2Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b03735fc6d570f4439e07f627fa47fe2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy3Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy3Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy3Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy3Config DeserializeSingleCreateEnemy3Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy3Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 1681957489;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy3Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a467a70315d60d643ae3226048fecf8a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy4Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy4Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy4Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy4Config DeserializeSingleCreateEnemy4Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy4Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -1725506126;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy4Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f53267384f77a0949abf696845e14ba7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy5Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy5Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy5Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy5Config DeserializeSingleCreateEnemy5Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy5Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -838002445;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy5Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1e371081c465bcc43b51cee7f6c68160
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 25 - 7
ActionTowerDefense/Assets/Gen/SingleDynamicEnemyConfig.cs → ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs

@@ -14,12 +14,15 @@ using SimpleJSON;
 namespace cfg
 namespace cfg
 { 
 { 
 
 
-public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase 
+public sealed partial class SingleCreateEnemy6Config :  Bright.Config.BeanBase 
 {
 {
-    public SingleDynamicEnemyConfig(JSONNode _json) 
+    public SingleCreateEnemy6Config(JSONNode _json) 
     {
     {
         { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
         { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
         { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
         { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
         { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
         { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
         { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
         { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
         { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
         { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
@@ -33,10 +36,13 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
         PostInit();
         PostInit();
     }
     }
 
 
-    public SingleDynamicEnemyConfig(int WaveID, string WaveName, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    public SingleCreateEnemy6Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
     {
     {
         this.WaveID = WaveID;
         this.WaveID = WaveID;
         this.WaveName = WaveName;
         this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
         this.EnemyName = EnemyName;
         this.EnemyName = EnemyName;
         this.Position = Position;
         this.Position = Position;
         this.StartTime = StartTime;
         this.StartTime = StartTime;
@@ -50,15 +56,15 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
         PostInit();
         PostInit();
     }
     }
 
 
-    public static SingleDynamicEnemyConfig DeserializeSingleDynamicEnemyConfig(JSONNode _json)
+    public static SingleCreateEnemy6Config DeserializeSingleCreateEnemy6Config(JSONNode _json)
     {
     {
-        return new SingleDynamicEnemyConfig(_json);
+        return new SingleCreateEnemy6Config(_json);
     }
     }
 
 
     /// <summary>
     /// <summary>
     /// 表格参数:
     /// 表格参数:
     /// </summary>
     /// </summary>
-    public int WaveID { get; private set; }
+    public float WaveID { get; private set; }
     /// <summary>
     /// <summary>
     /// 宽:
     /// 宽:
     /// </summary>
     /// </summary>
@@ -66,6 +72,15 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
     /// <summary>
     /// <summary>
     /// 140
     /// 140
     /// </summary>
     /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
     public string EnemyName { get; private set; }
     public string EnemyName { get; private set; }
     public System.Collections.Generic.List<int> Position { get; private set; }
     public System.Collections.Generic.List<int> Position { get; private set; }
     public int StartTime { get; private set; }
     public int StartTime { get; private set; }
@@ -77,7 +92,7 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
     public float ArmorRatio { get; private set; }
     public float ArmorRatio { get; private set; }
     public float ArmorPiercingRatio { get; private set; }
     public float ArmorPiercingRatio { get; private set; }
 
 
-    public const int __ID__ = 1939625395;
+    public const int __ID__ = 49501236;
     public override int GetTypeId() => __ID__;
     public override int GetTypeId() => __ID__;
 
 
     public  void Resolve(Dictionary<string, object> _tables)
     public  void Resolve(Dictionary<string, object> _tables)
@@ -94,6 +109,9 @@ public sealed partial class SingleDynamicEnemyConfig :  Bright.Config.BeanBase
         return "{ "
         return "{ "
         + "WaveID:" + WaveID + ","
         + "WaveID:" + WaveID + ","
         + "WaveName:" + WaveName + ","
         + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
         + "EnemyName:" + EnemyName + ","
         + "EnemyName:" + EnemyName + ","
         + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
         + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
         + "StartTime:" + StartTime + ","
         + "StartTime:" + StartTime + ","

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy6Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9df8331d0d4012944bb1eb240eb3e641
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy7Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy7Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy7Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy7Config DeserializeSingleCreateEnemy7Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy7Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 937004917;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy7Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 62380de861aa833489cdfa18d69c7993
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 131 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs

@@ -0,0 +1,131 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+using Bright.Serialization;
+using System.Collections.Generic;
+using SimpleJSON;
+
+
+
+namespace cfg
+{ 
+
+public sealed partial class SingleCreateEnemy8Config :  Bright.Config.BeanBase 
+{
+    public SingleCreateEnemy8Config(JSONNode _json) 
+    {
+        { if(!_json["WaveID"].IsNumber) { throw new SerializationException(); }  WaveID = _json["WaveID"]; }
+        { if(!_json["WaveName"].IsString) { throw new SerializationException(); }  WaveName = _json["WaveName"]; }
+        { if(!_json["WaveTime"].IsNumber) { throw new SerializationException(); }  WaveTime = _json["WaveTime"]; }
+        { if(!_json["BuildingID"].IsString) { throw new SerializationException(); }  BuildingID = _json["BuildingID"]; }
+        { if(!_json["BuildingHP"].IsNumber) { throw new SerializationException(); }  BuildingHP = _json["BuildingHP"]; }
+        { if(!_json["EnemyName"].IsString) { throw new SerializationException(); }  EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if(!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach(JSONNode __e0 in __json0.Children) { int __v0;  { if(!__e0.IsNumber) { throw new SerializationException(); }  __v0 = __e0; }  Position.Add(__v0); }   }
+        { if(!_json["StartTime"].IsNumber) { throw new SerializationException(); }  StartTime = _json["StartTime"]; }
+        { if(!_json["EndTime"].IsNumber) { throw new SerializationException(); }  EndTime = _json["EndTime"]; }
+        { if(!_json["Count"].IsNumber) { throw new SerializationException(); }  Count = _json["Count"]; }
+        { if(!_json["AttackRatio"].IsNumber) { throw new SerializationException(); }  AttackRatio = _json["AttackRatio"]; }
+        { if(!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); }  SpeedRatio = _json["SpeedRatio"]; }
+        { if(!_json["HPRatio"].IsNumber) { throw new SerializationException(); }  HPRatio = _json["HPRatio"]; }
+        { if(!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); }  ArmorRatio = _json["ArmorRatio"]; }
+        { if(!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); }  ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+
+    public SingleCreateEnemy8Config(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio ) 
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemy8Config DeserializeSingleCreateEnemy8Config(JSONNode _json)
+    {
+        return new SingleCreateEnemy8Config(_json);
+    }
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 140
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public string BuildingID { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = 1824508598;
+    public override int GetTypeId() => __ID__;
+
+    public  void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public  void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+    
+    partial void PostInit();
+    partial void PostResolve();
+}
+}

+ 11 - 0
ActionTowerDefense/Assets/Gen/SingleCreateEnemy8Config.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8ac5655bc849b504c8f1c9474c62116e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 45 - 10
ActionTowerDefense/Assets/Gen/Tables.cs

@@ -15,8 +15,15 @@ namespace cfg
 public sealed partial class Tables
 public sealed partial class Tables
 {
 {
     public CfgEnemy CfgEnemy {get; }
     public CfgEnemy CfgEnemy {get; }
-    public CfgCreateEnemy CfgCreateEnemy {get; }
-    public CfgDynamicEnemy CfgDynamicEnemy {get; }
+    public CfgCreateEnemy0 CfgCreateEnemy0 {get; }
+    public CfgCreateEnemy1 CfgCreateEnemy1 {get; }
+    public CfgCreateEnemy2 CfgCreateEnemy2 {get; }
+    public CfgCreateEnemy3 CfgCreateEnemy3 {get; }
+    public CfgCreateEnemy4 CfgCreateEnemy4 {get; }
+    public CfgCreateEnemy5 CfgCreateEnemy5 {get; }
+    public CfgCreateEnemy6 CfgCreateEnemy6 {get; }
+    public CfgCreateEnemy7 CfgCreateEnemy7 {get; }
+    public CfgCreateEnemy8 CfgCreateEnemy8 {get; }
     public CfgSoldierLevel CfgSoldierLevel {get; }
     public CfgSoldierLevel CfgSoldierLevel {get; }
 
 
     public Tables(System.Func<string, JSONNode> loader)
     public Tables(System.Func<string, JSONNode> loader)
@@ -24,17 +31,38 @@ public sealed partial class Tables
         var tables = new System.Collections.Generic.Dictionary<string, object>();
         var tables = new System.Collections.Generic.Dictionary<string, object>();
         CfgEnemy = new CfgEnemy(loader("cfgenemy")); 
         CfgEnemy = new CfgEnemy(loader("cfgenemy")); 
         tables.Add("CfgEnemy", CfgEnemy);
         tables.Add("CfgEnemy", CfgEnemy);
-        CfgCreateEnemy = new CfgCreateEnemy(loader("cfgcreateenemy")); 
-        tables.Add("CfgCreateEnemy", CfgCreateEnemy);
-        CfgDynamicEnemy = new CfgDynamicEnemy(loader("cfgdynamicenemy")); 
-        tables.Add("CfgDynamicEnemy", CfgDynamicEnemy);
+        CfgCreateEnemy0 = new CfgCreateEnemy0(loader("cfgcreateenemy0")); 
+        tables.Add("CfgCreateEnemy0", CfgCreateEnemy0);
+        CfgCreateEnemy1 = new CfgCreateEnemy1(loader("cfgcreateenemy1")); 
+        tables.Add("CfgCreateEnemy1", CfgCreateEnemy1);
+        CfgCreateEnemy2 = new CfgCreateEnemy2(loader("cfgcreateenemy2")); 
+        tables.Add("CfgCreateEnemy2", CfgCreateEnemy2);
+        CfgCreateEnemy3 = new CfgCreateEnemy3(loader("cfgcreateenemy3")); 
+        tables.Add("CfgCreateEnemy3", CfgCreateEnemy3);
+        CfgCreateEnemy4 = new CfgCreateEnemy4(loader("cfgcreateenemy4")); 
+        tables.Add("CfgCreateEnemy4", CfgCreateEnemy4);
+        CfgCreateEnemy5 = new CfgCreateEnemy5(loader("cfgcreateenemy5")); 
+        tables.Add("CfgCreateEnemy5", CfgCreateEnemy5);
+        CfgCreateEnemy6 = new CfgCreateEnemy6(loader("cfgcreateenemy6")); 
+        tables.Add("CfgCreateEnemy6", CfgCreateEnemy6);
+        CfgCreateEnemy7 = new CfgCreateEnemy7(loader("cfgcreateenemy7")); 
+        tables.Add("CfgCreateEnemy7", CfgCreateEnemy7);
+        CfgCreateEnemy8 = new CfgCreateEnemy8(loader("cfgcreateenemy8")); 
+        tables.Add("CfgCreateEnemy8", CfgCreateEnemy8);
         CfgSoldierLevel = new CfgSoldierLevel(loader("cfgsoldierlevel")); 
         CfgSoldierLevel = new CfgSoldierLevel(loader("cfgsoldierlevel")); 
         tables.Add("CfgSoldierLevel", CfgSoldierLevel);
         tables.Add("CfgSoldierLevel", CfgSoldierLevel);
         PostInit();
         PostInit();
 
 
         CfgEnemy.Resolve(tables); 
         CfgEnemy.Resolve(tables); 
-        CfgCreateEnemy.Resolve(tables); 
-        CfgDynamicEnemy.Resolve(tables); 
+        CfgCreateEnemy0.Resolve(tables); 
+        CfgCreateEnemy1.Resolve(tables); 
+        CfgCreateEnemy2.Resolve(tables); 
+        CfgCreateEnemy3.Resolve(tables); 
+        CfgCreateEnemy4.Resolve(tables); 
+        CfgCreateEnemy5.Resolve(tables); 
+        CfgCreateEnemy6.Resolve(tables); 
+        CfgCreateEnemy7.Resolve(tables); 
+        CfgCreateEnemy8.Resolve(tables); 
         CfgSoldierLevel.Resolve(tables); 
         CfgSoldierLevel.Resolve(tables); 
         PostResolve();
         PostResolve();
     }
     }
@@ -42,8 +70,15 @@ public sealed partial class Tables
     public void TranslateText(System.Func<string, string, string> translator)
     public void TranslateText(System.Func<string, string, string> translator)
     {
     {
         CfgEnemy.TranslateText(translator); 
         CfgEnemy.TranslateText(translator); 
-        CfgCreateEnemy.TranslateText(translator); 
-        CfgDynamicEnemy.TranslateText(translator); 
+        CfgCreateEnemy0.TranslateText(translator); 
+        CfgCreateEnemy1.TranslateText(translator); 
+        CfgCreateEnemy2.TranslateText(translator); 
+        CfgCreateEnemy3.TranslateText(translator); 
+        CfgCreateEnemy4.TranslateText(translator); 
+        CfgCreateEnemy5.TranslateText(translator); 
+        CfgCreateEnemy6.TranslateText(translator); 
+        CfgCreateEnemy7.TranslateText(translator); 
+        CfgCreateEnemy8.TranslateText(translator); 
         CfgSoldierLevel.TranslateText(translator); 
         CfgSoldierLevel.TranslateText(translator); 
     }
     }
     
     

+ 7 - 0
ActionTowerDefense/Assets/PIDI Game Development Framework/Planar Reflections 4/Shared Assets/Amplify Shader Editor Nodes/4.0.0 - Amplify Shader Editor Nodes.unitypackage.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 68e1c94b04df60048974896754524c17
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 320 - 15
ActionTowerDefense/Assets/Scenes/Game.unity

@@ -5728,6 +5728,141 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 256026858}
   m_GameObject: {fileID: 256026858}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &280230254
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 280230255}
+  - component: {fileID: 280230257}
+  - component: {fileID: 280230256}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &280230255
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 280230254}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2041973835}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &280230256
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 280230254}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: "\u4E0B\u4E00\u5173"
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 39a7404a24ab897418249c0d649949a8, type: 2}
+  m_sharedMaterial: {fileID: -1504297583073342176, guid: 39a7404a24ab897418249c0d649949a8, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4281479730
+  m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 50
+  m_fontSizeBase: 50
+  m_fontWeight: 400
+  m_enableAutoSizing: 0
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 0
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &280230257
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 280230254}
+  m_CullTransparentMesh: 1
 --- !u!1 &283838323
 --- !u!1 &283838323
 GameObject:
 GameObject:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -7615,7 +7750,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &741372828
 --- !u!224 &741372828
 RectTransform:
 RectTransform:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -20660,6 +20795,7 @@ GameObject:
   - component: {fileID: 1714821085}
   - component: {fileID: 1714821085}
   - component: {fileID: 1714821087}
   - component: {fileID: 1714821087}
   - component: {fileID: 1714821088}
   - component: {fileID: 1714821088}
+  - component: {fileID: 1714821093}
   - component: {fileID: 1714821089}
   - component: {fileID: 1714821089}
   - component: {fileID: 1714821090}
   - component: {fileID: 1714821090}
   - component: {fileID: 1714821091}
   - component: {fileID: 1714821091}
@@ -20684,6 +20820,7 @@ MonoBehaviour:
   m_Name: 
   m_Name: 
   m_EditorClassIdentifier: 
   m_EditorClassIdentifier: 
   gameTime: 0
   gameTime: 0
+  totalGameTime: 0
   p1uiHP: {fileID: 2035765039221954013}
   p1uiHP: {fileID: 2035765039221954013}
   p1uiMP: {fileID: 7582378586151668411}
   p1uiMP: {fileID: 7582378586151668411}
   demonicNum:
   demonicNum:
@@ -20692,6 +20829,9 @@ MonoBehaviour:
   - {fileID: 1934719935}
   - {fileID: 1934719935}
   text: {fileID: 1634269188}
   text: {fileID: 1634269188}
   chapterBG: {fileID: 0}
   chapterBG: {fileID: 0}
+  leveType: 0
+  nextLevelButton: {fileID: 2041973834}
+  isGaming: 0
 --- !u!4 &1714821086
 --- !u!4 &1714821086
 Transform:
 Transform:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -20719,11 +20859,18 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 0b88ebc6e4d3df6439f5464df5614ec5, type: 3}
   m_Script: {fileID: 11500000, guid: 0b88ebc6e4d3df6439f5464df5614ec5, type: 3}
   m_Name: 
   m_Name: 
   m_EditorClassIdentifier: 
   m_EditorClassIdentifier: 
-  soldierEXP: {fileID: 0}
+  levelSelect: {fileID: 1714821088}
+  soldierEXP: {fileID: 1714821090}
   createdEnemy: 
   createdEnemy: 
+  createdEnemy1: 
   idRange: {x: 0, y: 0}
   idRange: {x: 0, y: 0}
+  idRange1: {x: 0, y: 0}
   createdEnemyTower: []
   createdEnemyTower: []
+  createdEnemyTower1: []
   createdEnemyTowerHp: []
   createdEnemyTowerHp: []
+  createdEnemyTowerHp1: []
+  nowLevel: 0
+  levelTypes: 0000000000000000
 --- !u!114 &1714821088
 --- !u!114 &1714821088
 MonoBehaviour:
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -20736,18 +20883,17 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: cc3bac8dfa08dec4eb5eb9ed66ff6369, type: 3}
   m_Script: {fileID: 11500000, guid: cc3bac8dfa08dec4eb5eb9ed66ff6369, type: 3}
   m_Name: 
   m_Name: 
   m_EditorClassIdentifier: 
   m_EditorClassIdentifier: 
+  isDebug: 1
+  isAddLevel_debug: 0
+  levelIdA_debug: 8
+  levelIdB_debug: 2
   curLevel: {fileID: 741372831}
   curLevel: {fileID: 741372831}
-  curLevelID: 9
+  curLevelID: 0
   levels:
   levels:
-  - "1:\u54C8\u5C41"
-  - "2:\u54C8\u5C41 (2)"
-  - "3:\u54C8\u5C41 (3)"
-  - "4:\u521D\u59CB\u53E4\u7EB3\u5361"
-  - "5:\u521D\u59CB\u53E4\u7EB3\u5361 (2)"
-  - "6:\u521D\u59CB\u53E4\u7EB3\u5361 (3)"
-  - "7:\u521D\u59CB\u53E4\u7EB3\u5361 (4)"
-  - 8:test
-  - 9:test2
+  - "0:\u6C34\u9762\u5173\u53611"
+  - "1:\u6C34\u9762\u5173\u53612"
+  - "2:\u4ED9\u5BAB\u5173\u53611"
+  - "3:\u4ED9\u5BAB\u5173\u53612"
 --- !u!114 &1714821089
 --- !u!114 &1714821089
 MonoBehaviour:
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -20808,6 +20954,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 4d5827f0fa0c0104983cbcf4dc8cc942, type: 3}
   m_Script: {fileID: 11500000, guid: 4d5827f0fa0c0104983cbcf4dc8cc942, type: 3}
   m_Name: 
   m_Name: 
   m_EditorClassIdentifier: 
   m_EditorClassIdentifier: 
+  levelSelect: {fileID: 1714821088}
   seb:
   seb:
   - st: 0
   - st: 0
     summonAttack: 0
     summonAttack: 0
@@ -20848,6 +20995,25 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 089f096f5129267449881ed8ae316682, type: 3}
   m_Script: {fileID: 11500000, guid: 089f096f5129267449881ed8ae316682, type: 3}
   m_Name: 
   m_Name: 
   m_EditorClassIdentifier: 
   m_EditorClassIdentifier: 
+--- !u!114 &1714821093
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1714821084}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4b509edfbc0a728499dbf937a04ce3e1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  levelSettings:
+  - st: 0
+    origLevel: 1
+  - st: 1
+    origLevel: 2
+  - st: 2
+    origLevel: 5
 --- !u!1 &1729202001
 --- !u!1 &1729202001
 GameObject:
 GameObject:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -21574,6 +21740,140 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2033440887}
   m_GameObject: {fileID: 2033440887}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
   m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &2041973834
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2041973835}
+  - component: {fileID: 2041973838}
+  - component: {fileID: 2041973837}
+  - component: {fileID: 2041973836}
+  m_Layer: 5
+  m_Name: NextLevelButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &2041973835
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 280230255}
+  m_Father: {fileID: 3490440114689228974}
+  m_RootOrder: 12
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -142, y: -78}
+  m_SizeDelta: {x: 187.39001, y: 69.099976}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2041973836
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 2041973837}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 1714821085}
+        m_TargetAssemblyTypeName: GameManager, Assembly-CSharp
+        m_MethodName: NextLevel
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!114 &2041973837
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &2041973838
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2041973834}
+  m_CullTransparentMesh: 1
 --- !u!1 &2051679828
 --- !u!1 &2051679828
 GameObject:
 GameObject:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -22358,6 +22658,10 @@ PrefabInstance:
       propertyPath: m_Materials.Array.data[0]
       propertyPath: m_Materials.Array.data[0]
       value: 
       value: 
       objectReference: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
       objectReference: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
+    - target: {fileID: 6189424681395494106, guid: 956ff4379e83d3c49a9c10310dbf7cc7, type: 3}
+      propertyPath: m_IsActive
+      value: 1
+      objectReference: {fileID: 0}
     m_RemovedComponents: []
     m_RemovedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 956ff4379e83d3c49a9c10310dbf7cc7, type: 3}
   m_SourcePrefab: {fileID: 100100000, guid: 956ff4379e83d3c49a9c10310dbf7cc7, type: 3}
 --- !u!114 &7709371648474228
 --- !u!114 &7709371648474228
@@ -22442,7 +22746,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &7709371724858932
 --- !u!4 &7709371724858932
 Transform:
 Transform:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -23163,7 +23467,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
       objectReference: {fileID: 0}
     - target: {fileID: 1338420724588688035, guid: 8e99578d43abbeb4d95b0ae7f30a436a, type: 3}
     - target: {fileID: 1338420724588688035, guid: 8e99578d43abbeb4d95b0ae7f30a436a, type: 3}
       propertyPath: m_IsActive
       propertyPath: m_IsActive
-      value: 1
+      value: 0
       objectReference: {fileID: 0}
       objectReference: {fileID: 0}
     - target: {fileID: 2185887633804281442, guid: 8e99578d43abbeb4d95b0ae7f30a436a, type: 3}
     - target: {fileID: 2185887633804281442, guid: 8e99578d43abbeb4d95b0ae7f30a436a, type: 3}
       propertyPath: m_LocalPosition.x
       propertyPath: m_LocalPosition.x
@@ -24097,7 +24401,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!114 &3490440114689228963
 --- !u!114 &3490440114689228963
 MonoBehaviour:
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
@@ -24139,6 +24443,7 @@ RectTransform:
   - {fileID: 741372828}
   - {fileID: 741372828}
   - {fileID: 1634269187}
   - {fileID: 1634269187}
   - {fileID: 1171248097}
   - {fileID: 1171248097}
+  - {fileID: 2041973835}
   m_Father: {fileID: 0}
   m_Father: {fileID: 0}
   m_RootOrder: 7
   m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Characters/Enemy.cs

@@ -551,7 +551,7 @@ public class Enemy : MoveCharacter
             case CharacterState.Die:
             case CharacterState.Die:
                 if (dieKeepTime <= 0)
                 if (dieKeepTime <= 0)
                 {
                 {
-                    if (killer.GetComponent<Demonic>())
+                    if (killer!=null && killer.GetComponent<Demonic>())
                     {
                     {
                         SoldierType st = killer.GetComponent<Demonic>().soldierType;
                         SoldierType st = killer.GetComponent<Demonic>().soldierType;
                         SoldierEXP.expInstance.AddEXP(st, (int)(exp * LevelSelect.EXPRatio + 0.5f));
                         SoldierEXP.expInstance.AddEXP(st, (int)(exp * LevelSelect.EXPRatio + 0.5f));

+ 209 - 140
ActionTowerDefense/Assets/Scripts/EnemyCreater.cs

@@ -7,20 +7,27 @@ using System.Threading;
 
 
 public class EnemyCreater : MonoBehaviour
 public class EnemyCreater : MonoBehaviour
 {
 {
+    public LevelSelect levelSelect;
     private CancellationTokenSource _cancellationTokenSource;
     private CancellationTokenSource _cancellationTokenSource;
     public static EnemyCreater instance;
     public static EnemyCreater instance;
     public SoldierEXP soldierEXP;
     public SoldierEXP soldierEXP;
-    [SerializeField] public List<SingleCreateEnemyConfig> cfgCreateEnemy;
+    public List<SingleCreateEnemyConfig> cfgCreateEnemy;
+    public List<SingleCreateEnemyConfig> cfgCreateEnemy1;
     public List<bool> createdEnemy;
     public List<bool> createdEnemy;
+    public List<bool> createdEnemy1;
     public List<List<float>> createEnemyTime = new();
     public List<List<float>> createEnemyTime = new();
+    public List<List<float>> createEnemyTime1 = new();
     public Dictionary<string, List<Enemy>> enemyDic;
     public Dictionary<string, List<Enemy>> enemyDic;
     public Dictionary<string, List<GameObject>> buildingDic;
     public Dictionary<string, List<GameObject>> buildingDic;
-    private int curLevel;
     public Vector2Int idRange;  //当前关卡为出怪表[x,y]行
     public Vector2Int idRange;  //当前关卡为出怪表[x,y]行
+    public Vector2Int idRange1;  //当前关卡为出怪表[x,y]行
     public Dictionary<string, EnemyTower> enemyCreateTowerDic;
     public Dictionary<string, EnemyTower> enemyCreateTowerDic;
     public List<string> createdEnemyTower = new();
     public List<string> createdEnemyTower = new();
+    public List<string> createdEnemyTower1 = new();
     public List<float> createdEnemyTowerHp = new();
     public List<float> createdEnemyTowerHp = new();
-    public List<List<List<SingleDynamicEnemyConfig>>> cfgDynamicEnemy;
+    public List<float> createdEnemyTowerHp1 = new();
+    public int nowLevel;
+    public int[] levelTypes;   //“承”“转”关卡的类型
 
 
     private void Awake()
     private void Awake()
     {
     {
@@ -33,117 +40,211 @@ public class EnemyCreater : MonoBehaviour
             DestroyImmediate(gameObject);
             DestroyImmediate(gameObject);
             return;
             return;
         }
         }
-        enemyDic = new Dictionary<string, List<Enemy>>();
-        buildingDic = new Dictionary<string, List<GameObject>>();
-        enemyCreateTowerDic = new Dictionary<string, EnemyTower>();
+
         soldierEXP = GetComponent<SoldierEXP>();
         soldierEXP = GetComponent<SoldierEXP>();
     }
     }
 
 
     private void Start()
     private void Start()
     {
     {
+        levelSelect.ReloadCfg();
         _cancellationTokenSource = new CancellationTokenSource();
         _cancellationTokenSource = new CancellationTokenSource();
-        curLevel = GetComponent<LevelSelect>().curLevelID;
-        cfgCreateEnemy = GameManager.instance.allCfgData.CfgCreateEnemy.DataList;
+        Init();
+        ////把所有怪物prefab生成一遍防止后面初次生成卡顿
+        ////foreach (var item in createCharacter)
+        ////{
+        ////    for(int i = 0; i < item.tile.spawnTime[item.spawnTimeId].num; i++)
+        ////    {
+        ////        CreateEnemy(item.tile, Vector3.zero, 1, 1,false);
+        ////    }
+        ////}
+    }
+
+    public void Init()
+    {
+        if (LevelSelect.instance.isDebug)
+        {
+            if (LevelSelect.instance.isAddLevel_debug)
+            {
+                levelTypes[1] = LevelSelect.instance.levelIdB_debug;
+                GameManager.instance.leveType = LeveType.Conclusion;
+            }
+            nowLevel = LevelSelect.instance.levelIdA_debug;
+        }
+        else
+        {
+            switch (GameManager.instance.leveType)
+            {
+                case LeveType.Introduction:
+                    nowLevel = 0;
+                    break;
+                case LeveType.Development:
+                    nowLevel = levelTypes[0];
+                    break;
+                case LeveType.Transition:
+                    nowLevel = levelTypes[1];
+                    break;
+                case LeveType.Conclusion:
+                    nowLevel = levelTypes[0];
+                    break;
+            }
+        }
+
+
+        enemyDic = new Dictionary<string, List<Enemy>>();
+        buildingDic = new Dictionary<string, List<GameObject>>();
+        enemyCreateTowerDic = new Dictionary<string, EnemyTower>();
         createdEnemy = new List<bool>();
         createdEnemy = new List<bool>();
+        createEnemyTime = new List<List<float>>();
+        createdEnemyTower = new List<string>();
+        createdEnemyTowerHp = new List<float>();
         float waveTime = 0;
         float waveTime = 0;
         float id = 0;
         float id = 0;
-        int mapId = 1;
-        int start = -1;
-        int end = -1;
-        bool haveStart = false;
-        for(int i = 0; i < cfgCreateEnemy.Count; i++)
+        int startId;
+        int endId;
+
+        cfgCreateEnemy = GameManager.instance.createEnemyConfigs[nowLevel].DataList;
+
+        startId = levelSelect.levelsId[nowLevel][levelSelect.curLevelID];
+        endId = levelSelect.curLevelID < levelSelect.levels.Count ?
+            levelSelect.levelsId[nowLevel][levelSelect.curLevelID + 1]
+            : cfgCreateEnemy.Count;
+        if (cfgCreateEnemy[startId].WaveID != -1 || endId != cfgCreateEnemy.Count && cfgCreateEnemy[endId].WaveID != -1)
         {
         {
-            if (cfgCreateEnemy[i].WaveID == -1)
+            Debug.LogError("关卡导入出错");
+        }
+        idRange = new Vector2Int(startId, endId);
+
+        for (int i = startId + 1; i < endId; i++)
+        {
+            if (cfgCreateEnemy[i].WaveID == 0)
+            {
+                createdEnemy.Add(false);
+                createEnemyTime.Add(new List<float> { cfgCreateEnemy[i].StartTime, cfgCreateEnemy[i].EndTime });
+                createdEnemyTower.Add("");
+                createdEnemyTowerHp.Add(0);
+                waveTime = cfgCreateEnemy[i].WaveTime;
+            }
+            else if (cfgCreateEnemy[i].WaveID < 1)
+            {
+                createdEnemy.Add(false);
+                createEnemyTime.Add(new List<float> { 0, 0 });
+                if (id != cfgCreateEnemy[i].WaveID)
+                {
+                    createdEnemyTower.Add(cfgCreateEnemy[i].BuildingID);
+                    createdEnemyTowerHp.Add(cfgCreateEnemy[i].BuildingHP);
+                    id = cfgCreateEnemy[i].WaveID;
+                }
+                else
+                {
+                    int l = createdEnemyTower.Count;
+                    createdEnemyTower.Add(createdEnemyTower[l - 1]);
+                    createdEnemyTowerHp.Add(createdEnemyTowerHp[l - 1]);
+                }
+            }
+            else
             {
             {
-                if (curLevel == mapId)
+                createdEnemy.Add(false);
+                createEnemyTime.Add(new List<float> { waveTime + cfgCreateEnemy[i].StartTime, waveTime + cfgCreateEnemy[i].EndTime });
+                createdEnemyTower.Add("");
+                createdEnemyTowerHp.Add(0);
+                if (id != cfgCreateEnemy[i].WaveID)
                 {
                 {
-                    haveStart = true;
-                    start = i;
+                    waveTime += cfgCreateEnemy[i].WaveTime;
+                    id = cfgCreateEnemy[i].WaveID;
                 }
                 }
-                else if (curLevel + 1 == mapId)
+            }
+        }
+
+        if (GameManager.instance.leveType == LeveType.Conclusion 
+            || LevelSelect.instance.isDebug && LevelSelect.instance.isAddLevel_debug)
+        {
+            createdEnemy1 = new List<bool>();
+            createEnemyTime1 = new List<List<float>>();
+            createdEnemyTower1 = new List<string>();
+            createdEnemyTowerHp1 = new List<float>();
+            int startId1;
+            int endId1;
+            cfgCreateEnemy1 = GameManager.instance.createEnemyConfigs[levelTypes[1]].DataList;
+            startId1 = levelSelect.levelsId[levelTypes[1]][levelSelect.curLevelID];
+            endId1 = levelSelect.curLevelID < levelSelect.levels.Count ?
+                levelSelect.levelsId[levelTypes[1]][levelSelect.curLevelID + 1]
+                : cfgCreateEnemy.Count;
+            id = 0;
+            waveTime = 0;
+            for (int i = startId1 + 1; i < endId1; i++)
+            {
+                if (cfgCreateEnemy1[i].WaveID != 0)
                 {
                 {
-                    end = i - 1;
+                    startId1 = i - 1;
                     break;
                     break;
                 }
                 }
-                mapId++;
-                continue;
             }
             }
-            if (haveStart)
+            idRange1 = new Vector2Int(startId1, endId1);
+
+            for (int i = startId1 + 1; i < endId1; i++)
             {
             {
-                if(cfgCreateEnemy[i].WaveID == 0)
+                if (cfgCreateEnemy1[i].WaveID == 0)
                 {
                 {
-                    createdEnemy.Add(false);
-                    createEnemyTime.Add(new List<float> { cfgCreateEnemy[i].StartTime, cfgCreateEnemy[i].EndTime });
-                    createdEnemyTower.Add("");
-                    createdEnemyTowerHp.Add(0);
-                    waveTime = cfgCreateEnemy[i].WaveTime;
+                    Debug.LogError("出怪表导入数据异常");
                 }
                 }
-                else if(cfgCreateEnemy[i].WaveID < 1)
+                else if (cfgCreateEnemy1[i].WaveID < 1)
                 {
                 {
-                    createdEnemy.Add(false);
-                    createEnemyTime.Add(new List<float> { 0,0});
-                    if(id != cfgCreateEnemy[i].WaveID)
+                    createdEnemy1.Add(false);
+                    createEnemyTime1.Add(new List<float> { 0, 0 });
+                    if (id != cfgCreateEnemy1[i].WaveID)
                     {
                     {
-                        createdEnemyTower.Add(cfgCreateEnemy[i].BuildingID);
-                        createdEnemyTowerHp.Add(cfgCreateEnemy[i].BuildingHP);
-                        id = cfgCreateEnemy[i].WaveID;
+                        createdEnemyTower1.Add(cfgCreateEnemy1[i].BuildingID);
+                        createdEnemyTowerHp1.Add(cfgCreateEnemy1[i].BuildingHP);
+                        id = cfgCreateEnemy1[i].WaveID;
                     }
                     }
                     else
                     else
                     {
                     {
-                        int l = createdEnemyTower.Count;
-                        createdEnemyTower.Add(createdEnemyTower[l - 1]);
-                        createdEnemyTowerHp.Add(createdEnemyTowerHp[l - 1]);
+                        int l = createdEnemyTower1.Count;
+                        createdEnemyTower1.Add(createdEnemyTower1[l - 1]);
+                        createdEnemyTowerHp1.Add(createdEnemyTowerHp1[l - 1]);
                     }
                     }
                 }
                 }
                 else
                 else
                 {
                 {
-                    createdEnemy.Add(false);
-                    createEnemyTime.Add(new List<float> { waveTime + cfgCreateEnemy[i].StartTime, waveTime + cfgCreateEnemy[i].EndTime });
-                    createdEnemyTower.Add("");
-                    createdEnemyTowerHp.Add(0);
-                    if (id != cfgCreateEnemy[i].WaveID)
+                    createdEnemy1.Add(false);
+                    createEnemyTime1.Add(new List<float> 
+                    { waveTime + cfgCreateEnemy1[i].StartTime, waveTime + cfgCreateEnemy1[i].EndTime });
+                    createdEnemyTower1.Add("");
+                    createdEnemyTowerHp1.Add(0);
+                    if (id != cfgCreateEnemy1[i].WaveID)
                     {
                     {
-                        waveTime += cfgCreateEnemy[i].WaveTime;
-                        id = cfgCreateEnemy[i].WaveID;
+                        waveTime += cfgCreateEnemy1[i].WaveTime;
+                        id = cfgCreateEnemy1[i].WaveID;
                     }
                     }
                 }
                 }
             }
             }
         }
         }
-        if(end == -1)
+    }
+
+    //计算是九个出怪表中的哪个出怪表
+    public void GetLevelOrientation()
+    {
+        List<int> soldierRank = new List<int>();
+        for(int i = 0; i < 3; i++)
         {
         {
-            end = cfgCreateEnemy.Count - 1;
+            soldierRank.Add(SoldierEXP.expInstance.ssexp[i].level);
         }
         }
-        idRange = new Vector2Int(start, end);
-
-        List<SingleDynamicEnemyConfig> cfg = GameManager.instance.allCfgData.CfgDynamicEnemy.DataList;
-        cfgDynamicEnemy = new();
-        int sheet = -1;
-        for(int i = 0; i < cfg.Count; i++)
+        int maxId = MaxSoldierLevel(soldierRank);
+        List<int> typeDir = new List<int> { 6, 4, 1 };
+        for(int i = 0; i < 2; i++)
         {
         {
-            if(cfg[i].WaveID == -1)
+            levelTypes[i] = (typeDir[maxId] + 4 * i + Random.Range(-1, 2)+8)%8;
+            if(levelTypes[i] == 0)
             {
             {
-                sheet++;
-                cfgDynamicEnemy.Add(new List<List<SingleDynamicEnemyConfig>>());
-                for (int j = 0; j < 3; j++)
-                {
-                    cfgDynamicEnemy[sheet].Add(new List<SingleDynamicEnemyConfig>());
-                }
-                continue;
+                levelTypes[i] = 8;
             }
             }
-            cfgDynamicEnemy[sheet][cfg[i].WaveID - 1].Add(cfg[i]);
+            
         }
         }
-        //把所有怪物prefab生成一遍防止后面初次生成卡顿
-        //foreach (var item in createCharacter)
-        //{
-        //    for(int i = 0; i < item.tile.spawnTime[item.spawnTimeId].num; i++)
-        //    {
-        //        CreateEnemy(item.tile, Vector3.zero, 1, 1,false);
-        //    }
-        //}
     }
     }
+
     public void OnGameTimeChange(float gameTime)
     public void OnGameTimeChange(float gameTime)
     {
     {
-        for (int i = idRange[0] + 1; i <= idRange[1]; i++)
+        for (int i = idRange[0] + 1; i < idRange[1]; i++)
         {
         {
             int id = i - idRange[0] - 1;
             int id = i - idRange[0] - 1;
             if (!createdEnemy[id])
             if (!createdEnemy[id])
@@ -153,10 +254,10 @@ public class EnemyCreater : MonoBehaviour
                     createdEnemy[id] = true;
                     createdEnemy[id] = true;
                     StartCreateEnemy(cfgCreateEnemy[i]);
                     StartCreateEnemy(cfgCreateEnemy[i]);
                 }
                 }
-                else if(cfgCreateEnemy[i].WaveID < 1)
+                else if (cfgCreateEnemy[i].WaveID < 1)
                 {
                 {
                     EnemyTower enemyTower = enemyCreateTowerDic[createdEnemyTower[id]];
                     EnemyTower enemyTower = enemyCreateTowerDic[createdEnemyTower[id]];
-                    if (enemyTower != null && enemyTower.hp <= enemyTower.totalHp * createdEnemyTowerHp[id]/100f)
+                    if (enemyTower != null && enemyTower.hp <= enemyTower.totalHp * createdEnemyTowerHp[id] / 100f)
                     {
                     {
                         createdEnemy[id] = true;
                         createdEnemy[id] = true;
                         StartCreateEnemy(cfgCreateEnemy[i]);
                         StartCreateEnemy(cfgCreateEnemy[i]);
@@ -167,17 +268,37 @@ public class EnemyCreater : MonoBehaviour
                     if (createEnemyTime[id][0] <= gameTime)
                     if (createEnemyTime[id][0] <= gameTime)
                     {
                     {
                         createdEnemy[id] = true;
                         createdEnemy[id] = true;
-                        if(cfgCreateEnemy[i].Dynamic == 0)
+                        StartCreateEnemy(cfgCreateEnemy[i]);
+                    }
+                }
+            }
+        }
+        if (GameManager.instance.leveType == LeveType.Conclusion)
+        {
+            for (int i = idRange1[0] + 1; i < idRange1[1]; i++)
+            {
+                int id = i - idRange1[0] - 1;
+                if (!createdEnemy1[id])
+                {
+                    if (cfgCreateEnemy1[i].WaveID == 0)
+                    {
+                        Debug.LogError("出怪表导入数据异常");
+                    }
+                    else if (cfgCreateEnemy1[i].WaveID < 1)
+                    {
+                        EnemyTower enemyTower = enemyCreateTowerDic[createdEnemyTower1[id]];
+                        if (enemyTower != null && enemyTower.hp <= enemyTower.totalHp * createdEnemyTowerHp1[id] / 100f)
                         {
                         {
-                            StartCreateEnemy(cfgCreateEnemy[i]);
+                            createdEnemy1[id] = true;
+                            StartCreateEnemy(cfgCreateEnemy1[i]);
                         }
                         }
-                        else
+                    }
+                    else
+                    {
+                        if (createEnemyTime1[id][0] <= gameTime)
                         {
                         {
-                            int maxID = MaxSoldierLevel();
-                            foreach(var item in cfgDynamicEnemy[cfgCreateEnemy[i].Dynamic - 1][maxID])
-                            {
-                                StartCreateEnemy(item);
-                            }
+                            createdEnemy1[id] = true;
+                            StartCreateEnemy(cfgCreateEnemy1[i]);
                         }
                         }
                     }
                     }
                 }
                 }
@@ -192,51 +313,7 @@ public class EnemyCreater : MonoBehaviour
         {
         {
             return;
             return;
         }
         }
-        if(cfgCreateEnemy.Count == 0 || cfgCreateEnemy.Position.Count < 2)
-        {
-            return;
-        }
-        if (cfgCreateEnemy.Count == 1)
-        {
-            int randId = Random.Range(0, cfgCreateEnemy.Position.Count / 2 - 1);
-            Vector3 pos = new Vector3(cfgCreateEnemy.Position[randId * 2], cfgCreateEnemy.Position[randId * 2 + 1], 0);
-            CreateEnemy(cfgCreateEnemy, pos, true);
-            return;
-        }
-        int num1 = cfgCreateEnemy.Count / (cfgCreateEnemy.Position.Count / 2);
-        int num2 = cfgCreateEnemy.Count % (cfgCreateEnemy.Position.Count / 2);
-        float TimeInterval = cfgCreateEnemy.StartTime >= cfgCreateEnemy.EndTime
-            ? 0
-            : (float)(cfgCreateEnemy.EndTime - cfgCreateEnemy.StartTime) / (num2 == 0 ? num1 - 1 : num1);
-        for (int i = 0; i < num1; i++)
-        {
-            for (int j = 0; j < cfgCreateEnemy.Position.Count; j += 2)
-            {
-                Vector3 pos = new Vector3(cfgCreateEnemy.Position[j], cfgCreateEnemy.Position[j + 1], 0);
-                CreateEnemy(cfgCreateEnemy, pos, true);
-            }
-            await Task.Delay((int)(TimeInterval * 1000), _cancellationTokenSource.Token);
-            if (this == null || !this.isActiveAndEnabled)
-            {
-                Debug.Log("取消任务");
-                return; // 如果对象已被销毁,直接返回
-            }
-        }
-        List<int> randomPos = new(cfgCreateEnemy.Position);
-        for (int i = 0; i < num2; i++)
-        {
-            int randId = Random.Range(0, randomPos.Count / 2 - 1);
-            Vector3 pos = new Vector3(randomPos[randId * 2], randomPos[randId * 2 + 1], 0);
-            randomPos.Remove(randId * 2 + 1);
-            randomPos.Remove(randId * 2);
-            CreateEnemy(cfgCreateEnemy, pos, true);
-        }
-    }
-
-    //动态每一行怪
-    public async void StartCreateEnemy(SingleDynamicEnemyConfig cfgCreateEnemy)
-    {
-        if (!instance)
+        if (cfgCreateEnemy.Count == 0 || cfgCreateEnemy.Position.Count < 2)
         {
         {
             return;
             return;
         }
         }
@@ -260,7 +337,7 @@ public class EnemyCreater : MonoBehaviour
                 CreateEnemy(cfgCreateEnemy, pos, true);
                 CreateEnemy(cfgCreateEnemy, pos, true);
             }
             }
             await Task.Delay((int)(TimeInterval * 1000), _cancellationTokenSource.Token);
             await Task.Delay((int)(TimeInterval * 1000), _cancellationTokenSource.Token);
-            if (this == null || !this.isActiveAndEnabled)
+            if (this == null || !this.isActiveAndEnabled || !GameManager.instance.isGaming)
             {
             {
                 Debug.Log("取消任务");
                 Debug.Log("取消任务");
                 return; // 如果对象已被销毁,直接返回
                 return; // 如果对象已被销毁,直接返回
@@ -277,12 +354,12 @@ public class EnemyCreater : MonoBehaviour
         }
         }
     }
     }
 
 
-    public int MaxSoldierLevel()
+    //比较三个值里的最大值为哪个,等级相同则随机一个
+    public int MaxSoldierLevel(List<int> soldierRank)
     {
     {
-        SoldierEXP.SingleSoldierEXP[] singleSoldierEXP = soldierEXP.ssexp;
-        int a = singleSoldierEXP[0].level;
-        int b = singleSoldierEXP[1].level;
-        int c = singleSoldierEXP[2].level;
+        int a = soldierRank[0];
+        int b = soldierRank[1];
+        int c = soldierRank[2];
         int max = Mathf.Max(a, Mathf.Max(b, c)); // 先找到最大值
         int max = Mathf.Max(a, Mathf.Max(b, c)); // 先找到最大值
 
 
         // 收集所有等于最大值的变量名(可能有多个)
         // 收集所有等于最大值的变量名(可能有多个)
@@ -307,14 +384,6 @@ public class EnemyCreater : MonoBehaviour
             pos, active);
             pos, active);
     }
     }
 
 
-    //动态出怪表每一波怪
-    public void CreateEnemy(SingleDynamicEnemyConfig cfg, Vector3 pos, bool active = false)
-    {
-        CreateEnemyInit(cfg.EnemyName, cfg.WaveName,
-            cfg.HPRatio, cfg.AttackRatio, cfg.SpeedRatio, cfg.ArmorRatio, cfg.ArmorPiercingRatio,
-            pos, active);
-    }
-
     public GameObject CreateEnemyInit(string EnemyName, string WaveName,
     public GameObject CreateEnemyInit(string EnemyName, string WaveName,
         float HPRatio, float AttackRatio, float SpeedRatio, float ArmorRatio, float ArmorPiercingRatio,
         float HPRatio, float AttackRatio, float SpeedRatio, float ArmorRatio, float ArmorPiercingRatio,
         Vector3 pos, bool active = false)
         Vector3 pos, bool active = false)

+ 3 - 2
ActionTowerDefense/Assets/Scripts/ExcelEditor.cs

@@ -157,8 +157,9 @@ public class ExcelEditor
         // 配置进程启动信息
         // 配置进程启动信息
         ProcessStartInfo psi = new ProcessStartInfo
         ProcessStartInfo psi = new ProcessStartInfo
         {
         {
-            FileName = "cmd.exe", // 通过cmd调用
-            Arguments = $"/C \"{batPath}\"", // 传递.bat路径
+            //FileName = "cmd.exe", // 通过cmd调用
+            //Arguments = $"/C \"{batPath}\"", // 传递.bat路径
+            FileName = batPath, // 直接运行.bat文件
             WorkingDirectory = System.IO.Path.GetDirectoryName(batPath),
             WorkingDirectory = System.IO.Path.GetDirectoryName(batPath),
             UseShellExecute = true,
             UseShellExecute = true,
             CreateNoWindow = false
             CreateNoWindow = false

+ 86 - 7
ActionTowerDefense/Assets/Scripts/GameManager.cs

@@ -8,15 +8,16 @@ using TMPro;
 
 
 public enum SoldierType
 public enum SoldierType
 {
 {
-    spear = 0,
-    sword = 1,
-    shield = 2,
+    sword = 0,
+    shield = 1,
+    spear = 2,
 }
 }
 
 
 public class GameManager : MonoBehaviour
 public class GameManager : MonoBehaviour
 {
 {
     public static GameManager instance;
     public static GameManager instance;
     public float gameTime;
     public float gameTime;
+    public float totalGameTime;
     public Tables allCfgData;
     public Tables allCfgData;
     public UIHP p1uiHP;
     public UIHP p1uiHP;
     public UIHP p1uiMP;
     public UIHP p1uiMP;
@@ -24,6 +25,10 @@ public class GameManager : MonoBehaviour
     public TextMeshProUGUI text;
     public TextMeshProUGUI text;
     static public SoldierType[] curSoldiers;   //本局游戏选择的三个士兵
     static public SoldierType[] curSoldiers;   //本局游戏选择的三个士兵
     public GameObject chapterBG;    //当前关卡的原始背景(用于和boss背景做替换)
     public GameObject chapterBG;    //当前关卡的原始背景(用于和boss背景做替换)
+    public List<CreateEnemyConfig> createEnemyConfigs;
+    public LeveType leveType;
+    public GameObject nextLevelButton;
+    public bool isGaming;
 
 
     private JSONNode Loader(string fileName)
     private JSONNode Loader(string fileName)
     {
     {
@@ -34,7 +39,17 @@ public class GameManager : MonoBehaviour
     {
     {
         allCfgData = new Tables(Loader);
         allCfgData = new Tables(Loader);
     }
     }
+    public void ReloadCfgCreateEnemyData()
+    {
+        createEnemyConfigs = new List<CreateEnemyConfig>(); ;
+        for (int i = 0; i < 9; i++)
+        {
+            JSONNode keyValuePairs = JSON.Parse(File.ReadAllText($"GenerateDatas/json/CfgCreateEnemy{i}.json"));
+            CreateEnemyConfig createEnemyConfig = new CreateEnemyConfig(keyValuePairs);
+            createEnemyConfigs.Add(createEnemyConfig);
 
 
+        }
+    }
     private void Awake()
     private void Awake()
     {
     {
         //选定本局游戏有哪些士兵,后面兵多了这里要改
         //选定本局游戏有哪些士兵,后面兵多了这里要改
@@ -47,24 +62,88 @@ public class GameManager : MonoBehaviour
         {
         {
             instance = this;
             instance = this;
             GetAllExcel();
             GetAllExcel();
+            ReloadCfgCreateEnemyData();
         }
         }
         else
         else
         {
         {
             DestroyImmediate(gameObject);
             DestroyImmediate(gameObject);
             return;
             return;
         }
         }
+        leveType = LeveType.Introduction;
+
     }
     }
 
 
     private void Start()
     private void Start()
     {
     {
         gameTime = 0;
         gameTime = 0;
+        isGaming = true;
     }
     }
 
 
     private void FixedUpdate()
     private void FixedUpdate()
     {
     {
-        gameTime += Time.deltaTime;
-        EnemyCreater.instance.OnGameTimeChange(gameTime);
-        int timeText = (int)gameTime;
-        text.text = $"{timeText / 60:D2}:{timeText % 60:D2}({timeText}s)";
+        if (isGaming)
+        {
+            gameTime += Time.deltaTime;
+            totalGameTime += Time.deltaTime;
+            EnemyCreater.instance.OnGameTimeChange(gameTime);
+            int timeText = (int)totalGameTime;
+            text.text = $"{timeText / 60:D2}:{timeText % 60:D2}({timeText}s)";
+        }
+    }
+
+    //游戏结束
+    public void GameEnd()
+    {
+
+        isGaming = false;
+        foreach (List<Enemy> objs in EnemyCreater.instance.enemyDic.Values)
+        {
+            for (int i = 0; i < objs.Count; i++)
+            {
+                if (objs[i].gameObject.activeSelf)
+                {
+                    objs[i].ChangeState(CharacterState.Die);
+                }
+            }
+        }
+        if (leveType == LeveType.Conclusion)
+        {
+            return;
+        }
+
+        nextLevelButton.SetActive(true);
+    }
+
+    //下一关
+    public void NextLevel()
+    {
+        nextLevelButton.SetActive(false);
+
+        switch (leveType)
+        {
+            case LeveType.Introduction:
+                EnemyCreater.instance.GetLevelOrientation();
+                leveType = LeveType.Development;
+                break;
+            case LeveType.Development:
+                leveType = LeveType.Transition;
+                break;
+            case LeveType.Transition:
+                leveType = LeveType.Conclusion;
+                break;
+        }
+        PlayersInput.instance[0].PlayerRevive();
+        foreach(List<GameObject> objs in PoolManager.instance.activeObjs.Values)
+        {
+            List<GameObject> newObjs = new List<GameObject>(objs);
+            for(int i = 0; i < newObjs.Count; i++)
+            {
+                newObjs[i].gameObject.SetActive(false);
+            }
+        }
+        EnemyCreater.instance.Init();
+        LevelSelect.instance.ChangeText();
+        gameTime = 0;
+        isGaming = true;
     }
     }
 }
 }

+ 44 - 0
ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs

@@ -0,0 +1,44 @@
+using SimpleJSON;
+using System.Collections.Generic;
+
+public sealed partial class CreateEnemyConfig
+{
+    private readonly List<SingleCreateEnemyConfig> _dataList;
+
+
+    public CreateEnemyConfig(JSONNode _json)
+    {
+        _dataList = new List<SingleCreateEnemyConfig>();
+
+        foreach (JSONNode _row in _json.Children)
+        {
+            var _v = SingleCreateEnemyConfig.DeserializeSingleCreateEnemyConfig(_row);
+            _dataList.Add(_v);
+        }
+        PostInit();
+    }
+
+    public List<SingleCreateEnemyConfig> DataList => _dataList;
+
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        foreach (var v in _dataList)
+        {
+            v.Resolve(_tables);
+        }
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+        foreach (var v in _dataList)
+        {
+            v.TranslateText(translator);
+        }
+    }
+
+
+    partial void PostInit();
+    partial void PostResolve();
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/Levels/CreateEnemyConfig.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cd1879ea378c5724a944f52e56960ac3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 89 - 31
ActionTowerDefense/Assets/Scripts/Levels/LevelSelect.cs

@@ -1,39 +1,40 @@
-using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
-using UnityEditor;
 using UnityEngine.UI;
 using UnityEngine.UI;
 using TMPro;
 using TMPro;
 using OfficeOpenXml;
 using OfficeOpenXml;
 using System.IO;
 using System.IO;
 using Sirenix.OdinInspector;
 using Sirenix.OdinInspector;
+using SimpleJSON;
+
+public enum LeveType
+{
+    [LabelText("起")] Introduction,
+    [LabelText("承")] Development,
+    [LabelText("转")] Transition,
+    [LabelText("合")] Conclusion,
+}
 
 
 public class LevelSelect : MonoBehaviour
 public class LevelSelect : MonoBehaviour
 {
 {
+    public static LevelSelect instance;
+    [LabelText("调试开关")] public bool isDebug;
+    [ShowIf("isDebug")] [LabelText("合并关卡(测试用)")] public bool isAddLevel_debug;
+    [ShowIf("isDebug")] [LabelText("关卡类型A(测试用)")] public int levelIdA_debug;
+    [ShowIf("@isDebug && isAddLevel_debug")] [LabelText("关卡类型B(测试用)")] public int levelIdB_debug;
     public TextMeshProUGUI curLevel;
     public TextMeshProUGUI curLevel;
 
 
-    //[System.Serializable]
-    //public struct Level
-    //{
-    //    [Header("关卡名称")]
-    //    public string levelName;
-    //    public int levelId;
-    //    //[Header("出怪表sheet几")]
-    //    //public int enemyExcelID;
-    //    //[Header("建筑生成表sheet几")]
-    //    //public int buildingExcelID;
-    //}
-
-    [Header("当前关卡序号")]
-    public int curLevelID;
+    [LabelText("当前关卡序号")] public int curLevelID;
     [ReadOnly] public static float EXPRatio;
     [ReadOnly] public static float EXPRatio;
-
     [DisplayOnly] public List<string> levels;
     [DisplayOnly] public List<string> levels;
-    [Button("-Reload-",ButtonSizes.Large)]
+
+
+    public List<List<int>> levelsId;
+    [Button("-Reload-", ButtonSizes.Large)]
     public void ReloadEnemyCreatExcel()
     public void ReloadEnemyCreatExcel()
     {
     {
         List<string> sheets = new();
         List<string> sheets = new();
-        FileInfo fileInfo = new FileInfo("Luban/Config/Datas/出怪表.xlsx");
+        FileInfo fileInfo = new FileInfo("Luban/Config/Datas/EnemyCreater/出怪表0.xlsx");
         using (ExcelPackage package = new ExcelPackage(fileInfo))
         using (ExcelPackage package = new ExcelPackage(fileInfo))
         {
         {
             sheets = ExcelEditor.ReadExcelSheetsInfo(package);
             sheets = ExcelEditor.ReadExcelSheetsInfo(package);
@@ -41,28 +42,85 @@ public class LevelSelect : MonoBehaviour
         levels.Clear();
         levels.Clear();
         for(int i = 0; i < sheets.Count; i++)
         for(int i = 0; i < sheets.Count; i++)
         {
         {
-            levels.Add($"{i + 1}:{sheets[i]}");
+            levels.Add($"{i}:{sheets[i]}");
         }
         }
         ExcelEditor.RunBat();
         ExcelEditor.RunBat();
     }
     }
 
 
-    //[Header("所有关卡配置")]
-    //public Level[] levelConfig;
-    private void OnValidate()
+
+
+    public void ReloadCfg()
     {
     {
-        List<string> sheets = new();
-        FileInfo fileInfo = new FileInfo("Luban/Config/Datas/出怪表.xlsx");
-        using (ExcelPackage package = new ExcelPackage(fileInfo))
+        GameManager.instance.ReloadCfgCreateEnemyData();
+        levelsId = new List<List<int>>();
+        for (int i = 0; i < 9; i++)
         {
         {
-            sheets = ExcelEditor.ReadExcelSheetsInfo(package);
-            float.TryParse(ExcelEditor.GetCellData(package, sheets[curLevelID - 1], "F5"), out EXPRatio);
+            List<int> levelId = new List<int>();
+            List<SingleCreateEnemyConfig> cfgCreateEnemy = GameManager.instance.createEnemyConfigs[i].DataList;
+            for (int j = 0; j < cfgCreateEnemy.Count; j++)
+            {
+                if(cfgCreateEnemy[j].WaveID == -1)
+                {
+                    levelId.Add(j);
+                }
+            }
+            levelsId.Add(levelId);
         }
         }
+        Debug.Log("关卡数据导入完毕");
     }
     }
-
-
     private void Awake()
     private void Awake()
     {
     {
-        curLevel.text = levels[curLevelID - 1];
+        if (!instance)
+        {
+            instance = this;
+        }
+        else
+        {
+            DestroyImmediate(gameObject);
+            return;
+        }
+        
+    }
+
+    private void Start()
+    {
+        ChangeText();
+    }
+    public void ChangeText()
+    {
+        string text = levels[curLevelID];
 
 
+        if (isDebug)
+        {
+            text += $"_{levelIdA_debug}";
+            if (isAddLevel_debug)
+            {
+                text += $"+{levelIdB_debug}";
+            }
+        }
+        else
+        {
+            switch (GameManager.instance.leveType)
+            {
+                case LeveType.Introduction:
+                    text += "_起";
+                    break;
+                case LeveType.Development:
+                    text += "_承";
+                    text += $"_{EnemyCreater.instance.levelTypes[0]}";
+                    break;
+                case LeveType.Transition:
+                    text += "_转";
+                    text += $"_{EnemyCreater.instance.levelTypes[1]}";
+                    break;
+                case LeveType.Conclusion:
+                    text += "_合";
+                    text += $"_{EnemyCreater.instance.levelTypes[0]}+{EnemyCreater.instance.levelTypes[1]}";
+                    break;
+            }
+        }
+
+        curLevel.text = text;
     }
     }
+
 }
 }

+ 115 - 0
ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs

@@ -0,0 +1,115 @@
+using SimpleJSON;
+using Bright.Serialization;
+using System.Collections.Generic;
+
+public sealed partial class SingleCreateEnemyConfig : Bright.Config.BeanBase
+{
+    public SingleCreateEnemyConfig(JSONNode _json)
+    {
+        { if (!_json["WaveID"].IsNumber) { throw new SerializationException(); } WaveID = _json["WaveID"]; }
+        { if (!_json["WaveName"].IsString) { throw new SerializationException(); } WaveName = _json["WaveName"]; }
+        { if (!_json["WaveTime"].IsNumber) { throw new SerializationException(); } WaveTime = _json["WaveTime"]; }
+        { if (!_json["BuildingID"].IsString) { throw new SerializationException(); } BuildingID = _json["BuildingID"]; }
+        { if (!_json["BuildingHP"].IsNumber) { throw new SerializationException(); } BuildingHP = _json["BuildingHP"]; }
+        { if (!_json["EnemyName"].IsString) { throw new SerializationException(); } EnemyName = _json["EnemyName"]; }
+        { var __json0 = _json["Position"]; if (!__json0.IsArray) { throw new SerializationException(); } Position = new System.Collections.Generic.List<int>(__json0.Count); foreach (JSONNode __e0 in __json0.Children) { int __v0; { if (!__e0.IsNumber) { throw new SerializationException(); } __v0 = __e0; } Position.Add(__v0); } }
+        { if (!_json["StartTime"].IsNumber) { throw new SerializationException(); } StartTime = _json["StartTime"]; }
+        { if (!_json["EndTime"].IsNumber) { throw new SerializationException(); } EndTime = _json["EndTime"]; }
+        { if (!_json["Count"].IsNumber) { throw new SerializationException(); } Count = _json["Count"]; }
+        { if (!_json["AttackRatio"].IsNumber) { throw new SerializationException(); } AttackRatio = _json["AttackRatio"]; }
+        { if (!_json["SpeedRatio"].IsNumber) { throw new SerializationException(); } SpeedRatio = _json["SpeedRatio"]; }
+        { if (!_json["HPRatio"].IsNumber) { throw new SerializationException(); } HPRatio = _json["HPRatio"]; }
+        { if (!_json["ArmorRatio"].IsNumber) { throw new SerializationException(); } ArmorRatio = _json["ArmorRatio"]; }
+        { if (!_json["ArmorPiercingRatio"].IsNumber) { throw new SerializationException(); } ArmorPiercingRatio = _json["ArmorPiercingRatio"]; }
+        PostInit();
+    }
+    public SingleCreateEnemyConfig(float WaveID, string WaveName, int WaveTime, string BuildingID, float BuildingHP, string EnemyName, System.Collections.Generic.List<int> Position, int StartTime, int EndTime, int Count, float AttackRatio, float SpeedRatio, float HPRatio, float ArmorRatio, float ArmorPiercingRatio)
+    {
+        this.WaveID = WaveID;
+        this.WaveName = WaveName;
+        this.WaveTime = WaveTime;
+        this.BuildingID = BuildingID;
+        this.BuildingHP = BuildingHP;
+        this.EnemyName = EnemyName;
+        this.Position = Position;
+        this.StartTime = StartTime;
+        this.EndTime = EndTime;
+        this.Count = Count;
+        this.AttackRatio = AttackRatio;
+        this.SpeedRatio = SpeedRatio;
+        this.HPRatio = HPRatio;
+        this.ArmorRatio = ArmorRatio;
+        this.ArmorPiercingRatio = ArmorPiercingRatio;
+        PostInit();
+    }
+
+    public static SingleCreateEnemyConfig DeserializeSingleCreateEnemyConfig(JSONNode _json)
+    {
+        return new SingleCreateEnemyConfig(_json);
+    }
+
+
+    /// <summary>
+    /// 表格参数:
+    /// </summary>
+    public float WaveID { get; private set; }
+    /// <summary>
+    /// 宽:
+    /// </summary>
+    public string WaveName { get; private set; }
+    /// <summary>
+    /// 经验倍率:
+    /// </summary>
+    public int WaveTime { get; private set; }
+    /// <summary>
+    /// 1
+    /// </summary>
+    public string BuildingID { get; private set; }
+    public float BuildingHP { get; private set; }
+    public string EnemyName { get; private set; }
+    public System.Collections.Generic.List<int> Position { get; private set; }
+    public int StartTime { get; private set; }
+    public int EndTime { get; private set; }
+    public int Count { get; private set; }
+    public float AttackRatio { get; private set; }
+    public float SpeedRatio { get; private set; }
+    public float HPRatio { get; private set; }
+    public float ArmorRatio { get; private set; }
+    public float ArmorPiercingRatio { get; private set; }
+
+    public const int __ID__ = -980553554;
+    public override int GetTypeId() => __ID__;
+
+    public void Resolve(Dictionary<string, object> _tables)
+    {
+        PostResolve();
+    }
+
+    public void TranslateText(System.Func<string, string, string> translator)
+    {
+    }
+
+    public override string ToString()
+    {
+        return "{ "
+        + "WaveID:" + WaveID + ","
+        + "WaveName:" + WaveName + ","
+        + "WaveTime:" + WaveTime + ","
+        + "BuildingID:" + BuildingID + ","
+        + "BuildingHP:" + BuildingHP + ","
+        + "EnemyName:" + EnemyName + ","
+        + "Position:" + Bright.Common.StringUtil.CollectionToString(Position) + ","
+        + "StartTime:" + StartTime + ","
+        + "EndTime:" + EndTime + ","
+        + "Count:" + Count + ","
+        + "AttackRatio:" + AttackRatio + ","
+        + "SpeedRatio:" + SpeedRatio + ","
+        + "HPRatio:" + HPRatio + ","
+        + "ArmorRatio:" + ArmorRatio + ","
+        + "ArmorPiercingRatio:" + ArmorPiercingRatio + ","
+        + "}";
+    }
+
+    partial void PostInit();
+    partial void PostResolve();
+}

+ 1 - 1
ActionTowerDefense/Assets/Gen/SingleCreateEnemyConfig.cs.meta → ActionTowerDefense/Assets/Scripts/Levels/SingleCreateEnemyConfig.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
 fileFormatVersion: 2
-guid: b9c10a1e619909c4287d953082566739
+guid: 82dcfeb6c9bedc44580e5916f8cc94d8
 MonoImporter:
 MonoImporter:
   externalObjects: {}
   externalObjects: {}
   serializedVersion: 2
   serializedVersion: 2

+ 9 - 0
ActionTowerDefense/Assets/Scripts/PoolManager.cs

@@ -6,6 +6,7 @@ public class PoolManager : MonoBehaviour
 {
 {
     public static PoolManager instance;
     public static PoolManager instance;
     public Dictionary<GameObject, List<GameObject>> pools;
     public Dictionary<GameObject, List<GameObject>> pools;
+    public Dictionary<GameObject, List<GameObject>> activeObjs;
 
 
     void Awake()
     void Awake()
     {
     {
@@ -17,6 +18,7 @@ public class PoolManager : MonoBehaviour
         instance = this;
         instance = this;
 
 
         pools = new Dictionary<GameObject, List<GameObject>>();
         pools = new Dictionary<GameObject, List<GameObject>>();
+        activeObjs = new Dictionary<GameObject, List<GameObject>>();
     }
     }
 
 
     public static GameObject Instantiate(GameObject prefab, Vector3 pos = default, Quaternion rotation = default, Transform parent = null)
     public static GameObject Instantiate(GameObject prefab, Vector3 pos = default, Quaternion rotation = default, Transform parent = null)
@@ -37,6 +39,11 @@ public class PoolManager : MonoBehaviour
             poolItem.prefab = prefab;
             poolItem.prefab = prefab;
         }
         }
         go.SetActive(true);
         go.SetActive(true);
+        if (!instance.activeObjs.ContainsKey(prefab))
+        {
+            instance.activeObjs.Add(prefab, new List<GameObject>());
+        }
+        instance.activeObjs[prefab].Add(go);
         return go;
         return go;
     }
     }
 
 
@@ -47,6 +54,7 @@ public class PoolManager : MonoBehaviour
             pools.Add(poolItem.prefab, new List<GameObject>());
             pools.Add(poolItem.prefab, new List<GameObject>());
         }
         }
         pools[poolItem.prefab].Add(poolItem.gameObject);
         pools[poolItem.prefab].Add(poolItem.gameObject);
+        activeObjs[poolItem.prefab].Remove(poolItem.gameObject);
     }
     }
 
 
     public void DestroyItem(PoolItem poolItem)
     public void DestroyItem(PoolItem poolItem)
@@ -56,5 +64,6 @@ public class PoolManager : MonoBehaviour
             return;
             return;
         }
         }
         pools[poolItem.prefab].Remove(poolItem.gameObject);
         pools[poolItem.prefab].Remove(poolItem.gameObject);
+        activeObjs[poolItem.prefab].Remove(poolItem.gameObject);
     }
     }
 }
 }

+ 1 - 1
ActionTowerDefense/Assets/Scripts/Portal/PortalsCreater.cs

@@ -9,7 +9,7 @@ public class PortalsCreater : MonoBehaviour
     public PortalsController[] portalsControllers = new PortalsController[2];
     public PortalsController[] portalsControllers = new PortalsController[2];
     public CoreCharacter coreCharacter;
     public CoreCharacter coreCharacter;
     [HideInInspector]
     [HideInInspector]
-    public EnemyCreater enemyCreater;
+    //public EnemyCreater enemyCreater;
     public PortalsCountDownUI portalsDownUI;
     public PortalsCountDownUI portalsDownUI;
 
 
     public TextMeshProUGUI[] countDowns;        //µ¹¼ÆÊ±
     public TextMeshProUGUI[] countDowns;        //µ¹¼ÆÊ±

+ 5 - 2
ActionTowerDefense/Assets/Scripts/Rougue/SoldierLevelRecord.cs

@@ -5,6 +5,8 @@ using cfg;
 
 
 public class SoldierLevelRecord : MonoBehaviour
 public class SoldierLevelRecord : MonoBehaviour
 {
 {
+    public LevelSelect levelSelect;
+
     [System.Serializable]
     [System.Serializable]
     public struct SoldierExtraBuff
     public struct SoldierExtraBuff
     {
     {
@@ -49,10 +51,11 @@ public class SoldierLevelRecord : MonoBehaviour
         allSoldierEXPLists = new List<SoldierEXPList>();
         allSoldierEXPLists = new List<SoldierEXPList>();
         RecordLevelLists();
         RecordLevelLists();
         CurGameSoldierEXPList();
         CurGameSoldierEXPList();
+        Test_LevelSetting test_LevelSetting = GetComponent<Test_LevelSetting>();
         //测试用——开局士兵初始等级
         //测试用——开局士兵初始等级
-        if(GetComponent<Test_LevelSetting>() != null)
+        if(test_LevelSetting != null && levelSelect.isDebug)
         {
         {
-            GetComponent<Test_LevelSetting>().TestLevel();
+            test_LevelSetting.TestLevel();
         }
         }
 
 
     }
     }

+ 2 - 1
ActionTowerDefense/Assets/Scripts/Rougue/Test_LevelSetting.cs

@@ -6,6 +6,7 @@ using cfg;
 
 
 public class Test_LevelSetting : MonoBehaviour
 public class Test_LevelSetting : MonoBehaviour
 {
 {
+    
     [System.Serializable]
     [System.Serializable]
     public struct LevelSetting
     public struct LevelSetting
     {
     {
@@ -33,7 +34,7 @@ public class Test_LevelSetting : MonoBehaviour
             {
             {
                 if (sel.st == ls.st)
                 if (sel.st == ls.st)
                 {
                 {
-                    needEXP = sel.ssl[ls.origLevel - 1].EXP;
+                    needEXP = sel.ssl[ls.origLevel - 2].EXP;
                 }
                 }
             }
             }
             sexp.AddEXP(ls.st, needEXP);
             sexp.AddEXP(ls.st, needEXP);

+ 4 - 0
ActionTowerDefense/Assets/Scripts/Tower/EnemyTower.cs

@@ -71,6 +71,10 @@ public class EnemyTower : Character
                 if (dieKeepTime <= 0)
                 if (dieKeepTime <= 0)
                 {
                 {
                     TowerMap.enemyTowers.Remove(gameObject);
                     TowerMap.enemyTowers.Remove(gameObject);
+                    if(TowerMap.enemyTowers.Count ==0)
+                    {
+                        GameManager.instance.GameEnd();
+                    }
                     gameObject.SetActive(false);
                     gameObject.SetActive(false);
                     break;
                     break;
                 }
                 }

+ 0 - 3296
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy.json

@@ -1,3296 +0,0 @@
-[
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "敌塔1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      120,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "血量动态",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "敌塔1",
-    "BuildingHP": 50,
-    "EnemyName": "飞胖",
-    "Position": [
-      57,
-      4,
-      60,
-      4,
-      60,
-      6
-    ],
-    "StartTime": 1,
-    "EndTime": 2,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "白鹭",
-    "Position": [
-      60,
-      8
-    ],
-    "StartTime": 5,
-    "EndTime": 60,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "1.5爆发",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "白鹭",
-    "Position": [
-      59,
-      12,
-      63,
-      12
-    ],
-    "StartTime": 40,
-    "EndTime": 45,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      32,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      118,
-      1,
-      120,
-      1,
-      122,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "1塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 99,
-    "EnemyName": "大猪",
-    "Position": [
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      57,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      56,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "1塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 40,
-    "EnemyName": "大猪",
-    "Position": [
-      58,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 2,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      56,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      55,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "2塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 99,
-    "EnemyName": "老鬼头",
-    "Position": [
-      28,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      28,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "2塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 50,
-    "EnemyName": "道士",
-    "Position": [
-      26,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      27,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "3塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 99,
-    "EnemyName": "幽灵头",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "3塔出2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 70,
-    "EnemyName": "道士",
-    "Position": [
-      1,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "3塔出3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 40,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 30,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      2,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 15,
-    "AttackRatio": 3,
-    "SpeedRatio": 3,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      1,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "动",
-    "Dynamic": 2,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔1",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      32,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      118,
-      1,
-      120,
-      1,
-      122,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "1塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 99,
-    "EnemyName": "大猪",
-    "Position": [
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      57,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      56,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "1塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 40,
-    "EnemyName": "大猪",
-    "Position": [
-      58,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 2,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      56,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      55,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "2塔出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 99,
-    "EnemyName": "老鬼头",
-    "Position": [
-      28,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.03,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      28,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "2塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔2",
-    "BuildingHP": 50,
-    "EnemyName": "道士",
-    "Position": [
-      26,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      30,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.04,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      27,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "3塔出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 99,
-    "EnemyName": "幽灵头",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.05,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "3塔出2",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 70,
-    "EnemyName": "道士",
-    "Position": [
-      1,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.06,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      3,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "3塔出3",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔1",
-    "BuildingHP": 40,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 30,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      1,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 3,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.07,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "老鬼头",
-    "Position": [
-      2,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 15,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 1,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 3,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 3,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 3,
-    "WaveTime": 8,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      39,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 4,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "5",
-    "Dynamic": 3,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 6,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      39,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 7,
-    "WaveName": "7",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      7
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 8,
-    "WaveName": "8",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      44,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 9,
-    "WaveName": "9",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      44,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 10,
-    "WaveName": "10",
-    "Dynamic": 3,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 11,
-    "WaveName": "11",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "小猪",
-    "Position": [
-      4,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 12,
-    "WaveName": "12",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 13,
-    "WaveName": "13",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "道士",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 14,
-    "WaveName": "14",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "虾兵",
-    "Position": [
-      4,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 15,
-    "WaveName": "15",
-    "Dynamic": 3,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 3,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      45,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "0",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      112,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "1",
-    "Dynamic": 0,
-    "WaveTime": 4,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "飞胖",
-    "Position": [
-      44,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 4,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "塔3",
-    "Dynamic": 0,
-    "WaveTime": 5,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "敌方防御塔",
-    "Position": [
-      55,
-      1,
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0,
-    "WaveName": "我塔",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "防御塔",
-    "Position": [
-      118,
-      1,
-      120,
-      1,
-      122,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "1出",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 99,
-    "EnemyName": "1013",
-    "Position": [
-      58,
-      1,
-      61,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 8,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.01,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      57,
-      5
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "1出1",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "塔3",
-    "BuildingHP": 40,
-    "EnemyName": "1013",
-    "Position": [
-      56,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 12,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      58,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 0.02,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      56,
-      9
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "初始",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      67,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      68,
-      4,
-      70,
-      4
-    ],
-    "StartTime": 0,
-    "EndTime": 5,
-    "Count": 8,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      58,
-      10
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "2波",
-    "Dynamic": 0,
-    "WaveTime": 15,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      35,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 8,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      42,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      26,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "3",
-    "Dynamic": 0,
-    "WaveTime": 10,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      35,
-      1,
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      26,
-      8,
-      51,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 5,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "4",
-    "Dynamic": 0,
-    "WaveTime": 15,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      53,
-      1,
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 1,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 4,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      44,
-      8,
-      50,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 3,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "6",
-    "Dynamic": 0,
-    "WaveTime": 15,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "1013",
-    "Position": [
-      35,
-      1,
-      53,
-      1,
-      59,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 12,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "大猪",
-    "Position": [
-      42,
-      1,
-      60,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 1,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 5,
-    "WaveName": "",
-    "Dynamic": 0,
-    "WaveTime": 0,
-    "BuildingID": "",
-    "BuildingHP": 0,
-    "EnemyName": "幽灵头",
-    "Position": [
-      26,
-      8,
-      44,
-      8,
-      50,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 6,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  }
-]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy0.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy1.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "小猪",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "小猪",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 11,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy2.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "道士",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy3.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "大猪",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "大猪",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy4.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "幽灵头",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "幽灵头",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy5.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "虾兵",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy6.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "老鬼头",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy7.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "飞胖",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 494 - 0
ActionTowerDefense/GenerateDatas/json/cfgcreateenemy8.json

@@ -0,0 +1,494 @@
+[
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "白鹭",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": -1,
+    "WaveName": "占位行",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "",
+    "Position": [],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 0,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "敌塔1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "敌方防御塔",
+    "Position": [
+      60,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0,
+    "WaveName": "我塔",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "防御塔",
+    "Position": [
+      120,
+      1
+    ],
+    "StartTime": 0,
+    "EndTime": 0,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 0.01,
+    "WaveName": "血量动态1",
+    "WaveTime": 0,
+    "BuildingID": "敌塔1",
+    "BuildingHP": 50,
+    "EnemyName": "飞胖",
+    "Position": [
+      57,
+      4,
+      60,
+      4,
+      60,
+      6
+    ],
+    "StartTime": 1,
+    "EndTime": 2,
+    "Count": 1,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 1,
+    "WaveName": "1",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      60,
+      8
+    ],
+    "StartTime": 5,
+    "EndTime": 60,
+    "Count": 30,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  },
+  {
+    "WaveID": 2,
+    "WaveName": "1.5爆发",
+    "WaveTime": 0,
+    "BuildingID": "",
+    "BuildingHP": 0,
+    "EnemyName": "1013",
+    "Position": [
+      59,
+      12,
+      63,
+      12
+    ],
+    "StartTime": 40,
+    "EndTime": 45,
+    "Count": 10,
+    "AttackRatio": 1,
+    "SpeedRatio": 1,
+    "HPRatio": 1,
+    "ArmorRatio": 1,
+    "ArmorPiercingRatio": 1
+  }
+]

+ 0 - 265
ActionTowerDefense/GenerateDatas/json/cfgdynamicenemy.json

@@ -1,265 +0,0 @@
-[
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "对空",
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 2,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "",
-    "EnemyName": "小猪",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "对肉",
-    "EnemyName": "老鬼头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "",
-    "EnemyName": "幽灵头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "对地",
-    "EnemyName": "道士",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "",
-    "EnemyName": "小猪",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 1,
-    "SpeedRatio": 2,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "对空",
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 6,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1.5,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "对肉",
-    "EnemyName": "老鬼头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 20,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1.5,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "对地",
-    "EnemyName": "道士",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 15,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1.5,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": -1,
-    "WaveName": "占位行",
-    "EnemyName": "",
-    "Position": [],
-    "StartTime": 0,
-    "EndTime": 0,
-    "Count": 0,
-    "AttackRatio": 1,
-    "SpeedRatio": 1,
-    "HPRatio": 1,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 1,
-    "WaveName": "对空",
-    "EnemyName": "飞胖",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 10,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 3,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 2,
-    "WaveName": "对肉",
-    "EnemyName": "老鬼头",
-    "Position": [
-      4,
-      8
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 40,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  },
-  {
-    "WaveID": 3,
-    "WaveName": "对地",
-    "EnemyName": "道士",
-    "Position": [
-      6,
-      1
-    ],
-    "StartTime": 0,
-    "EndTime": 10,
-    "Count": 30,
-    "AttackRatio": 2,
-    "SpeedRatio": 2,
-    "HPRatio": 2,
-    "ArmorRatio": 1,
-    "ArmorPiercingRatio": 1
-  }
-]

BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表0.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表1.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表2.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表3.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表4.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表5.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表6.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表7.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/EnemyCreater/出怪表8.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/__tables__.xlsx


BIN
ActionTowerDefense/Luban/Config/Datas/出怪表.xlsx


Some files were not shown because too many files changed in this diff