chenxin
2020-11-04 80b4237334a773b29bf69f38532a90ca659b3bfe
boss技能泡泡炸弹
1 files renamed
3 files deleted
44 files added
49 files modified
3557 ■■■■ changed files
Assets/00000/package/Materials/Glow_003_b.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_012_b.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_029_02.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_039.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_004.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_005.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_006.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Object_009.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_005_4X3.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_006_6X5.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_007_4X3.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_008_6X4.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_009_3X2.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_019_4X4_02.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_022_4X4_02.mat 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Sequence_024_9X8_b.mat 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Enemies/BossAgent.prefab 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Enemies/fire 2.prefab 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Enemies/fire.prefab 18 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Enemies/water.prefab 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Enemies/wood 2.prefab 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Enemies/wood.prefab 2 ●●● patch | view | raw | blame | history
Assets/RPG Monster Wave PBR/Animators/TurtleShellMod.controller 6 ●●●● patch | view | raw | blame | history
Assets/Resources/Prefabs.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Resources/Prefabs/Endless.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Resources/Prefabs/Endless/BubbleBomb.prefab 539 ●●●●● patch | view | raw | blame | history
Assets/Resources/Prefabs/Endless/BubbleBomb.prefab.meta 7 ●●●●● patch | view | raw | blame | history
Assets/Resources/UI/Endless/Boss/1.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Resources/UI/Endless/Boss/1.png patch | view | raw | blame | history
Assets/Resources/UI/Endless/Boss/1.png.meta 118 ●●●●● patch | view | raw | blame | history
Assets/Resources/UI/Endless/Boss/1/New Folder.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Resources/UI/Endless/Boss/2.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Resources/UI/Endless/Boss/2.png patch | view | raw | blame | history
Assets/Resources/UI/Endless/bubbleBombTitle.png patch | view | raw | blame | history
Assets/Resources/UI/Endless/bubbleBombTitle.png.meta 6 ●●●● patch | view | raw | blame | history
Assets/Scenes/Levels/Battle/Endless.unity 105 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Common/GameUtils.cs 10 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Core/Utilities/Timer.cs 181 ●●●● patch | view | raw | blame | history
Assets/Scripts/Data/EndlessBossData.cs 36 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Data/EndlessBossData.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Data/EndlessBossSkillData.cs 34 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Data/EndlessBossSkillData.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Data/EndlessBuffData.cs 1 ●●●● patch | view | raw | blame | history
Assets/Scripts/Data/EndlessPortData.cs 16 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossActionState.cs 5 ●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillAIType.cs 15 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillAIType.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillAgentType.cs 15 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillAgentType.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillTowerType.cs 18 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillTowerType.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillTunelType.cs 21 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillTunelType.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillType.cs 21 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillType.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillUseTarget.cs 25 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/EndlessBossSkillUseTarget.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/SpawnAgentType.cs 19 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/SpawnAgentType.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Event/EventType.cs 10 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Json/JsonDataCenter.cs 2 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Net/NetExtends/Table.cs 8 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs 685 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/Agent.cs 7 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs 101 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/AgentInsManager.cs 91 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs 61 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessWave.cs 14 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs 14 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs 2 ●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs 33 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossCtrl.cs 36 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs 409 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillShieldWall.cs 28 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillShieldWall.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs 28 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs 132 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs 183 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs 86 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs 65 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs 30 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs 19 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs 2 ●●●●● patch | view | raw | blame | history
Assets/StreamingAssets/Table/boss_skill.json 2 ●●● patch | view | raw | blame | history
Assets/StreamingAssets/Table/endless_boss.json 2 ●●● patch | view | raw | blame | history
Assets/StreamingAssets/Table/endless_buff.json 2 ●●● patch | view | raw | blame | history
Assets/StreamingAssets/Table/endless_enemy.json 2 ●●● patch | view | raw | blame | history
Assets/StreamingAssets/Table/endless_port.json 2 ●●● patch | view | raw | blame | history
Assets/00000/package/Materials/Glow_003_b.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Glow_003 1
  m_Name: Glow_003_b
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Glow_012_b.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Glow_012 1
  m_Name: Glow_012_b
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Glow_029_02.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Glow_029_b
  m_Name: Glow_029_02
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Glow_039.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: ditu
  m_Name: Glow_039
  m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_004.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Object_0014
  m_Name: Object_004
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_005.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Object_0029
  m_Name: Object_005
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_006.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: "\u7CBE\u70753"
  m_Name: Object_006
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Object_009.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: "1920\u6C34\u66761"
  m_Name: Object_009
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_005_4X3.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: 7e7ae91d-c194-4197-81f1-30d18678a08c
  m_Name: Sequence_005_4X3
  m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_006_6X5.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: 42c3f028-4755-4977-8544-0365321b0312
  m_Name: Sequence_006_6X5
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_007_4X3.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: 218d2fa5-3080-44fd-8769-2dcbb57a589f
  m_Name: Sequence_007_4X3
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_008_6X4.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: c8cd391b-30df-4811-9715-3b8cdf8c36c6
  m_Name: Sequence_008_6X4
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_009_3X2.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: ef115a70-dd8a-4420-9182-f650ae55c8da
  m_Name: Sequence_009_3X2
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 0
Assets/00000/package/Materials/Sequence_019_4X4_02.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Sequence_019_4X4_b
  m_Name: Sequence_019_4X4_02
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_022_4X4_02.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Sequence_022_4X4 1
  m_Name: Sequence_022_4X4_02
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/00000/package/Materials/Sequence_024_9X8_b.mat
@@ -7,7 +7,7 @@
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_Name: Sequence_024_9X8 1
  m_Name: Sequence_024_9X8_b
  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
  m_ShaderKeywords: 
  m_LightmapFlags: 4
Assets/Prefabs/Enemies/BossAgent.prefab
@@ -176,7 +176,7 @@
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1261689212745562
GameObject:
Assets/Prefabs/Enemies/fire 2.prefab
@@ -427,7 +427,7 @@
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &671268144671726192
PrefabInstance:
Assets/Prefabs/Enemies/fire.prefab
@@ -406,7 +406,7 @@
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &671268144671726192
PrefabInstance:
@@ -799,6 +799,10 @@
  m_Modification:
    m_TransformParent: {fileID: 8434816861478773449}
    m_Modifications:
    - target: {fileID: 1213450339260476, guid: 33eba0da32885b84ebf38245df0735fa, type: 3}
      propertyPath: m_IsActive
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 1594767147126006, guid: 33eba0da32885b84ebf38245df0735fa, type: 3}
      propertyPath: m_Name
      value: Model
@@ -807,6 +811,18 @@
      propertyPath: m_IsActive
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 1674156658475200, guid: 33eba0da32885b84ebf38245df0735fa, type: 3}
      propertyPath: m_IsActive
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 1920189015369716, guid: 33eba0da32885b84ebf38245df0735fa, type: 3}
      propertyPath: m_IsActive
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 1940922409561372, guid: 33eba0da32885b84ebf38245df0735fa, type: 3}
      propertyPath: m_IsActive
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 4258366756040210, guid: 33eba0da32885b84ebf38245df0735fa, type: 3}
      propertyPath: m_LocalPosition.x
      value: 0
Assets/Prefabs/Enemies/water.prefab
@@ -406,7 +406,7 @@
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &1417015450723705814
PrefabInstance:
Assets/Prefabs/Enemies/wood 2.prefab
@@ -427,7 +427,7 @@
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &51849727615761245
PrefabInstance:
Assets/Prefabs/Enemies/wood.prefab
@@ -406,7 +406,7 @@
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0.2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &51849727615761245
PrefabInstance:
Assets/RPG Monster Wave PBR/Animators/TurtleShellMod.controller
@@ -116,19 +116,19 @@
    m_DefaultFloat: 0
    m_DefaultInt: 0
    m_DefaultBool: 0
    m_Controller: {fileID: 9100000}
    m_Controller: {fileID: 0}
  - m_Name: Die
    m_Type: 4
    m_DefaultFloat: 0
    m_DefaultInt: 0
    m_DefaultBool: 0
    m_Controller: {fileID: 9100000}
    m_Controller: {fileID: 0}
  - m_Name: Attack
    m_Type: 4
    m_DefaultFloat: 0
    m_DefaultInt: 0
    m_DefaultBool: 0
    m_Controller: {fileID: 9100000}
    m_Controller: {fileID: 0}
  m_AnimatorLayers:
  - serializedVersion: 5
    m_Name: Base Layer
Assets/Resources/Prefabs.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0caf6f9e89f9cdd48ba594423ba3178a
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Prefabs/Endless.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7b1c99ecc56f1424cbbd65bc089ad715
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/Prefabs/Endless/BubbleBomb.prefab
New file
@@ -0,0 +1,539 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &7131284347495473863
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1369085180611037263}
  - component: {fileID: 8833090956031970945}
  - component: {fileID: 3703726531420749549}
  m_Layer: 0
  m_Name: Targetter
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &1369085180611037263
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 7131284347495473863}
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: 0, y: 0.2, z: 0}
  m_LocalScale: {x: 4.5, y: 5, z: 4.5}
  m_Children: []
  m_Father: {fileID: 8434816861478773449}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!135 &8833090956031970945
SphereCollider:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 7131284347495473863}
  m_Material: {fileID: 0}
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &3703726531420749549
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 7131284347495473863}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: d0e4035901ee40bba7c0866d2c6338a1, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  turret: {fileID: 0}
  searchEnemyFunc: 1
  turretXRotationRange: {x: 0, y: 359}
  onlyYTurretRotation: 1
  searchRate: 0
  idleRotationSpeed: 1
  idleCorrectionTime: 0.2
  attachedCollider: {fileID: 8833090956031970945}
  idleWaitTime: 2
--- !u!1 &8434816860007424699
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 8434816860007424696}
  m_Layer: 11
  m_Name: Targetable
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &8434816860007424696
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816860007424699}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0.5, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 8434816861478773449}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8434816861478773448
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 8434816861478773449}
  - component: {fileID: 8434816861478773452}
  - component: {fileID: 8434816861478773455}
  - component: {fileID: 8056910340826571656}
  - component: {fileID: 8434816861478773555}
  - component: {fileID: 6659287669452185599}
  - component: {fileID: 8434816861478773554}
  - component: {fileID: 2476106126470318335}
  - component: {fileID: 652547545057790155}
  - component: {fileID: 2034107896435957072}
  m_Layer: 11
  m_Name: BubbleBomb
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &8434816861478773449
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  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_Children:
  - {fileID: 1369085180611037263}
  - {fileID: 8434816860007424696}
  - {fileID: 822954139837810748}
  - {fileID: 9210104854641884541}
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!195 &8434816861478773452
NavMeshAgent:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_AgentTypeID: 0
  m_Radius: 0.1
  m_Speed: 2
  m_Acceleration: 20
  avoidancePriority: 50
  m_AngularSpeed: 0
  m_StoppingDistance: 0.4
  m_AutoTraverseOffMeshLink: 1
  m_AutoBraking: 1
  m_AutoRepath: 1
  m_Height: 1
  m_BaseOffset: 0
  m_WalkableMask: 7
  m_ObstacleAvoidanceType: 0
--- !u!114 &8434816861478773455
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 4a4f7293b07e4698a4e3b652679f0c75, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  description:
  projectile: {fileID: 0}
  projectilePoints: []
  epicenter: {fileID: 8434816861478773449}
  isMultiAttack: 0
  maxAttackNum: 1
  fireRate: 0
  bWoodAffector: 0
  randomAudioSource: {fileID: 0}
  towerTargetter: {fileID: 3703726531420749549}
  radiusEffectColor: {r: 0, g: 0, b: 0, a: 0}
--- !u!114 &8056910340826571656
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: a92cd5a2e6e04f84aa172ab3a5f342a1, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  configuration:
    maxHealth: 60
    startingHealth: 60
    alignment:
      unityObjectReference: {fileID: 11400000, guid: 9dc4735bf52f547d59ebe1007e9a0e7f,
        type: 2}
  targetTransform: {fileID: 8434816860007424696}
  bElit: 0
  bBoss: 0
  poisonTex: {fileID: 0}
  frozenTex: {fileID: 0}
  commonTex: {fileID: 0}
  PoisonParticle: {fileID: 0}
  PoisonEndParticle: {fileID: 0}
  SlowDownParticle: {fileID: 0}
  FrostParticle: {fileID: 0}
  appliedEffectOffset: {x: 0, y: 0, z: 0}
  appliedEffectScale: 1
  healthBar: {fileID: 0}
  spawnParticle: {fileID: 0}
  bShowDebugNode: 0
  NormalEffect: {fileID: 5386092016719681635}
  ExplodeEffect: {fileID: 1333670259778310432}
--- !u!54 &8434816861478773555
Rigidbody:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  serializedVersion: 2
  m_Mass: 1
  m_Drag: 0
  m_AngularDrag: 0.05
  m_UseGravity: 0
  m_IsKinematic: 1
  m_Interpolate: 0
  m_Constraints: 0
  m_CollisionDetection: 0
--- !u!136 &6659287669452185599
CapsuleCollider:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Material: {fileID: 0}
  m_IsTrigger: 0
  m_Enabled: 1
  m_Radius: 2.2
  m_Height: 1
  m_Direction: 1
  m_Center: {x: 0, y: 0.4, z: 0}
--- !u!114 &8434816861478773554
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 8cf1cc7cb7e6b49f893f609dd57fce01, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  damageableBehaviour: {fileID: 0}
  damageScale: 1
--- !u!114 &2476106126470318335
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 7d012ff014d994436a27059a09e8ab64, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  homeBaseAttackChargeTime: 1
--- !u!114 &652547545057790155
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 59d007c1fe5e41c1888e4af3392f8676, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  initialPoolCapacity: 10
--- !u!114 &2034107896435957072
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: fedeb0b3c5e104ea19d0d4599d22ab97, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  damage: 10
  damageMulti: 1
  towerName:
  bSet: 0
  chanceToSpawnCollisionPrefab: 1
  collisionObj: {fileID: 0}
  alignment:
    unityObjectReference: {fileID: 11400000, guid: 9dc4735bf52f547d59ebe1007e9a0e7f,
      type: 2}
--- !u!1001 &5861091491599655757
PrefabInstance:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    m_TransformParent: {fileID: 8434816861478773449}
    m_Modifications:
    - target: {fileID: 211218241868599864, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 2011413103471262510, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3003286573158039164, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_Name
      value: Effect_ShuiBoss_Atk
      objectReference: {fileID: 0}
    - target: {fileID: 5100670453587805948, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 5253684803858780405, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalPosition.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalPosition.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalPosition.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalRotation.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalRotation.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalRotation.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalRotation.w
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_RootOrder
      value: 2
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 7832518119722543244, guid: 2174baf7c84209b48b5f059bc9b45f0a,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    m_RemovedComponents: []
  m_SourcePrefab: {fileID: 100100000, guid: 2174baf7c84209b48b5f059bc9b45f0a, type: 3}
--- !u!4 &822954139837810748 stripped
Transform:
  m_CorrespondingSourceObject: {fileID: 6502493927850175345, guid: 2174baf7c84209b48b5f059bc9b45f0a,
    type: 3}
  m_PrefabInstance: {fileID: 5861091491599655757}
  m_PrefabAsset: {fileID: 0}
--- !u!198 &5386092016719681635 stripped
ParticleSystem:
  m_CorrespondingSourceObject: {fileID: 2011413103471262510, guid: 2174baf7c84209b48b5f059bc9b45f0a,
    type: 3}
  m_PrefabInstance: {fileID: 5861091491599655757}
  m_PrefabAsset: {fileID: 0}
--- !u!1001 &6091048980364245149
PrefabInstance:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    m_TransformParent: {fileID: 8434816861478773449}
    m_Modifications:
    - target: {fileID: 2286521056855946055, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 2370081798993619891, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3068511617495723435, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalPosition.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalPosition.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalPosition.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalRotation.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalRotation.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalRotation.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalRotation.w
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_RootOrder
      value: 3
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 3653789310721185227, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 5045692736981395901, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 5682223977695237745, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: m_Name
      value: Effect_ShuiBoss_Hit
      objectReference: {fileID: 0}
    - target: {fileID: 7849420514037070550, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 8489956598537573869, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 8586965635893210643, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
        type: 3}
      propertyPath: playOnAwake
      value: 0
      objectReference: {fileID: 0}
    m_RemovedComponents: []
  m_SourcePrefab: {fileID: 100100000, guid: 09e6fd34dc3085b41aedc00dd8d5f361, type: 3}
--- !u!4 &9210104854641884541 stripped
Transform:
  m_CorrespondingSourceObject: {fileID: 3122997129545123296, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
    type: 3}
  m_PrefabInstance: {fileID: 6091048980364245149}
  m_PrefabAsset: {fileID: 0}
--- !u!198 &1333670259778310432 stripped
ParticleSystem:
  m_CorrespondingSourceObject: {fileID: 5045692736981395901, guid: 09e6fd34dc3085b41aedc00dd8d5f361,
    type: 3}
  m_PrefabInstance: {fileID: 6091048980364245149}
  m_PrefabAsset: {fileID: 0}
Assets/Resources/Prefabs/Endless/BubbleBomb.prefab.meta
New file
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 164953adef233e743be6963f59bb2817
PrefabImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/UI/Endless/Boss/1.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c77c525281f9ff840b7bdf51d5cc46f7
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/UI/Endless/Boss/1.png
Binary files differ
Assets/Resources/UI/Endless/Boss/1.png.meta
File was deleted
Assets/Resources/UI/Endless/Boss/1/New Folder.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 88edaaebfaa2b764b95a13f5d1284d33
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/UI/Endless/Boss/2.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1545c05cf9b6e194e91c1a00cd218918
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Resources/UI/Endless/Boss/2.png
Binary files differ
Assets/Resources/UI/Endless/bubbleBombTitle.png
Assets/Resources/UI/Endless/bubbleBombTitle.png.meta
File was renamed from Assets/Resources/UI/Endless/Boss/2.png.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 688fc2c2e4b8b224fa4bb8fe8c8b46ca
guid: 9c78752966bdbec4f9a34991cfc6b500
TextureImporter:
  internalIDToNameTable: []
  externalObjects: {}
@@ -89,12 +89,12 @@
    buildTarget: Android
    maxTextureSize: 2048
    resizeAlgorithm: 0
    textureFormat: -1
    textureFormat: 4
    textureCompression: 1
    compressionQuality: 50
    crunchedCompression: 0
    allowsAlphaSplitting: 0
    overridden: 0
    overridden: 1
    androidETC2FallbackOverride: 0
    forceMaximumCompressionQuality_BC6H_BC7: 0
  spriteSheet:
Assets/Scenes/Levels/Battle/Endless.unity
@@ -280,7 +280,7 @@
  - {fileID: 1474449435}
  - {fileID: 654889359}
  m_Father: {fileID: 849284131}
  m_RootOrder: 1
  m_RootOrder: 2
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
@@ -956,6 +956,7 @@
  - component: {fileID: 114868873}
  - component: {fileID: 114868872}
  - component: {fileID: 114868875}
  - component: {fileID: 114868876}
  m_Layer: 5
  m_Name: Boss
  m_TagString: Untagged
@@ -1052,6 +1053,19 @@
  m_Name: 
  m_EditorClassIdentifier: 
  BossAnimator: {fileID: 114868872}
  Title: {fileID: 1232635866}
--- !u!114 &114868876
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 114868870}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 178f167d46a275f46b252d07f0809e45, type: 3}
  m_Name:
  m_EditorClassIdentifier:
--- !u!1 &122104235
GameObject:
  m_ObjectHideFlags: 0
@@ -2734,7 +2748,7 @@
  - {fileID: 2031820231}
  - {fileID: 1525511251}
  m_Father: {fileID: 849284131}
  m_RootOrder: 0
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
@@ -6389,6 +6403,7 @@
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 0, y: 0, z: 0}
  m_Children:
  - {fileID: 1232635865}
  - {fileID: 306286610}
  - {fileID: 19764330}
  - {fileID: 1730636813}
@@ -9576,7 +9591,7 @@
  - {fileID: 1108718555}
  - {fileID: 1387193656}
  m_Father: {fileID: 849284131}
  m_RootOrder: 3
  m_RootOrder: 4
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
@@ -10171,6 +10186,81 @@
  m_Father: {fileID: 1164797329}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1232635864
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1232635865}
  - component: {fileID: 1232635867}
  - component: {fileID: 1232635866}
  m_Layer: 5
  m_Name: BubbleBombTitle
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!224 &1232635865
RectTransform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1232635864}
  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_Children: []
  m_Father: {fileID: 849284131}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
  m_AnchoredPosition: {x: 0, y: 121}
  m_SizeDelta: {x: 476, y: 114}
  m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1232635866
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1232635864}
  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: 21300000, guid: 9c78752966bdbec4f9a34991cfc6b500, type: 3}
  m_Type: 0
  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 &1232635867
CanvasRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1232635864}
  m_CullTransparentMesh: 0
--- !u!1 &1242417025
GameObject:
  m_ObjectHideFlags: 0
@@ -11764,8 +11854,8 @@
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1447220349}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 58, y: 28, z: 0}
  m_LocalPosition: {x: 0, y: -5, z: 0}
  m_LocalScale: {x: 58.6, y: 29, z: 1}
  m_Children: []
  m_Father: {fileID: 654889359}
  m_RootOrder: 0
@@ -11810,7 +11900,7 @@
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_Sprite: {fileID: 21300000, guid: c9633b2aaeee7e540b04803cb6e9cd45, type: 3}
  m_Sprite: {fileID: 21300000, guid: 2dac89ddb9ecb5640ade8b7a19e262b8, type: 3}
  m_MaskAlphaCutoff: 0.2
  m_FrontSortingLayerID: 0
  m_BackSortingLayerID: 0
@@ -13055,6 +13145,7 @@
  m_Script: {fileID: 11500000, guid: 003fa822c2d516a488dcbbed96c8d9ab, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  buyButtonScaler: 1.9
  placementTilePrefab: {fileID: 114496876178851720, guid: 8ce97201eea4a404b86d7d0906b89847,
    type: 3}
  placementTilePrefabMobile: {fileID: 114496876178851720, guid: 18a440af7ac5d46c8af359534286c4bf,
@@ -14080,7 +14171,7 @@
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 849284131}
  m_RootOrder: 2
  m_RootOrder: 3
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
Assets/Scripts/Common/GameUtils.cs
@@ -7,6 +7,16 @@
{
    public class GameUtils
    {
        private static int id { get; set; } = 0;
        /// <summary>
        /// 获取一个唯一id
        /// </summary>
        public static int GetId()
        {
            return id++;
        }
        public static int[] GetIntArray(JsonData jsData)
        {
            int[] tmp = new int[jsData.Count];
Assets/Scripts/Core/Utilities/Timer.cs
@@ -4,115 +4,116 @@
namespace Core.Utilities
{
    /// <summary>
    /// A timer data model. Consumed/process by the TimedBehaviour
    /// 塔防游戏的基础Timer包装类,设置一个time时间后要引发的操作,然后每一轮Tick这个Timer,触发后Tick返回true
    /// 由调用层进行相应的操作。
    /// </summary>
    public class Timer
    {
        /// <summary>
        /// Event fired on elapsing
        /// </summary>
        readonly Action m_Callback;
    /// <summary>
    /// A timer data model. Consumed/process by the TimedBehaviour
    /// 塔防游戏的基础Timer包装类,设置一个time时间后要引发的操作,然后每一轮Tick这个Timer,触发后Tick返回true
    /// 由调用层进行相应的操作。
    /// </summary>
    public class Timer
    {
        /// <summary>
        /// Event fired on elapsing
        /// </summary>
        readonly Action m_Callback;
        /// <summary>
        /// The time
        /// </summary>
        float m_Time, m_CurrentTime;
        /// <summary>
        /// The time
        /// </summary>
        float m_Time, m_CurrentTime;
        protected static int TIMER_IDSTART = 0;
        protected static int TIMER_IDSTART = 0;
        protected int mTimerID = 0;
        protected int mTimerID = 0;
        /// <summary>
        /// Normalized progress of the timer
        /// </summary>
        public float normalizedProgress
        {
            get { return Mathf.Clamp(m_CurrentTime / m_Time, 0f, 1f); }
        }
        /// <summary>
        /// Normalized progress of the timer
        /// </summary>
        public float normalizedProgress
        {
            get { return Mathf.Clamp(m_CurrentTime / m_Time, 0f, 1f); }
        }
        public float currentTime
        public float currentTime
        {
            get { return this.m_CurrentTime; }
        }
        public int timerID
        public int timerID
        {
            get { return this.mTimerID; }
            get { return this.mTimerID; }
        }
        /// <summary>
        /// Timer constructor
        /// </summary>
        /// <param name="newTime">the time that timer is counting</param>
        /// <param name="onElapsed">the event fired at the end of the timer elapsing</param>
        public Timer(float newTime, Action onElapsed = null)
        {
            SetTime(newTime);
        /// <summary>
        /// Timer constructor
        /// </summary>
        /// <param name="newTime">the time that timer is counting</param>
        /// <param name="onElapsed">the event fired at the end of the timer elapsing</param>
        public Timer(float newTime, Action onElapsed = null)
        {
            SetTime(newTime);
            m_CurrentTime = 0f;
            m_Callback += onElapsed;
            m_CurrentTime = 0f;
            m_Callback += onElapsed;
            mTimerID = TIMER_IDSTART++;
        }
            mTimerID = TIMER_IDSTART++;
        }
        /// <summary>
        /// Returns the result of AssessTime
        /// </summary>
        /// <param name="deltaTime">change in time between ticks</param>
        /// <returns>true if the timer has elapsed, false otherwise</returns>
        public virtual bool Tick(float deltaTime)
        {
            return AssessTime(deltaTime);
        }
        /// <summary>
        /// Returns the result of AssessTime
        /// </summary>
        /// <param name="deltaTime">change in time between ticks</param>
        /// <returns>true if the timer has elapsed, false otherwise</returns>
        public virtual bool Tick(float deltaTime)
        {
            return AssessTime(deltaTime);
        }
        /// <summary>
        /// Checks if the time has elapsed and fires the tick event
        /// </summary>
        /// <param name="deltaTime">the change in time between assessments</param>
        /// <returns>true if the timer has elapsed, false otherwise</returns>
        protected bool AssessTime(float deltaTime)
        {
            m_CurrentTime += deltaTime;
            if (m_CurrentTime >= m_Time)
            {
                FireEvent();
                return true;
            }
        /// <summary>
        /// Checks if the time has elapsed and fires the tick event
        /// </summary>
        /// <param name="deltaTime">the change in time between assessments</param>
        /// <returns>true if the timer has elapsed, false otherwise</returns>
        protected bool AssessTime(float deltaTime)
        {
            m_CurrentTime += deltaTime;
            if (m_CurrentTime >= m_Time)
            {
                FireEvent();
                return true;
            }
            return false;
        }
            return false;
        }
        /// <summary>
        /// Resets the current time to 0
        /// </summary>
        public void Reset()
        {
            m_CurrentTime = 0;
        }
        /// <summary>
        /// Resets the current time to 0
        /// </summary>
        public void Reset()
        {
            m_CurrentTime = 0;
        }
        /// <summary>
        /// Fires the associated timer event
        /// </summary>
        public void FireEvent()
        {
            m_Callback.Invoke();
        }
        /// <summary>
        /// Fires the associated timer event
        /// </summary>
        public void FireEvent()
        {
            if (m_Callback != null)
                m_Callback.Invoke();
        }
        /// <summary>
        /// Sets the elapsed time
        /// </summary>
        /// <param name="newTime">sets the time to a new value</param>
        public void SetTime(float newTime)
        {
            m_Time = newTime;
        /// <summary>
        /// Sets the elapsed time
        /// </summary>
        /// <param name="newTime">sets the time to a new value</param>
        public void SetTime(float newTime)
        {
            m_Time = newTime;
            if (newTime <= 0)
            {
                m_Time = 0.1f;
            }
        }
    }
            if (newTime <= 0)
            {
                m_Time = 0.1f;
            }
        }
    }
}
Assets/Scripts/Data/EndlessBossData.cs
New file
@@ -0,0 +1,36 @@
using UnityEngine;
using System.Collections.Generic;
/**
 * 无尽模式boss表处理类
 * @Author: chenxin
 * @Date: 2020-11-02 13:46:33
 */
namespace KTGMGemClient
{
    public class EndlessBossData
    {
        private static List<endless_boss> endlessBossList;
        public static void Init()
        {
            endlessBossList = JsonDataCenter.GetList<endless_boss>();
        }
        /// <summary>
        /// 根据id获取表数据
        /// </summary>
        /// <param name="id"></param>
        public static endless_boss GetDataById(int id)
        {
            for (int i = 0; i < endlessBossList.Count; ++i)
            {
                if (endlessBossList[i].id == id)
                    return endlessBossList[i];
            }
            Debug.LogError($"--------------------- bossId: {id},找不到对应的boss数据 ---------------------");
            return null;
        }
    }
}
Assets/Scripts/Data/EndlessBossData.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9ab2fe4b0fe03644c80dfd2ed055bde7
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Data/EndlessBossSkillData.cs
New file
@@ -0,0 +1,34 @@
using System.Collections.Generic;
/**
 * 无尽模式boss技能表处理类
 * @Author: chenxin
 * @Date: 2020-11-02 13:51:00
 */
namespace KTGMGemClient
{
    public class EndlessBossSkillData
    {
        private static List<boss_skill> endlessBossSkillList;
        public static void Init()
        {
            endlessBossSkillList = JsonDataCenter.GetList<boss_skill>();
        }
        /// <summary>
        /// 根据id获取表数据
        /// </summary>
        /// <param name="id"></param>
        public static boss_skill GetDataById(int id)
        {
            for (int i = 0; i < endlessBossSkillList.Count; ++i)
            {
                if (endlessBossSkillList[i].id == id)
                    return endlessBossSkillList[i];
            }
            return null;
        }
    }
}
Assets/Scripts/Data/EndlessBossSkillData.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 59ceada5402529a48b7c2666e59b6c8a
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Data/EndlessBuffData.cs
@@ -78,7 +78,6 @@
            new Color(118 / 255f, 1, 118 / 255f),
            new Color(131 / 255f, 181 / 255f, 1),
            new Color(220 / 255f, 112 / 255f, 1),
            new Color()
        };
        public static void Init()
Assets/Scripts/Data/EndlessPortData.cs
@@ -67,15 +67,19 @@
            endlessPortList = JsonDataCenter.GetList<endless_port>();
            portConfigList = new List<EndlessPortConfig>();
            portDic = new Dictionary<int, List<EndlessPortConfig>>();
            InitPortList(portConfigList, endlessPortList);
        }
        private static void InitPortList(List<EndlessPortConfig> list, List<endless_port> srcList)
        /// <summary>
        /// 更新关卡数据的时候也重新初始化一次
        /// </summary>
        public static void InitPortList()
        {
            maxLevel = 0;
            int? preLevel = null;
            portConfigList.Clear();
            portDic.Clear();
            foreach (endless_port data in srcList)
            foreach (endless_port data in endlessPortList)
            {
                if (!GameConfig.IsNewbie && data.level < 0) continue;
@@ -97,11 +101,11 @@
                }
                param.DropTotalWeight = totalWeight;
                list.Add(param);
                portConfigList.Add(param);
                if (!portDic.ContainsKey(param.PortLevel))
                    portDic.Add(param.PortLevel, new List<EndlessPortConfig>());
                portDic[param.PortLevel].Add(param);
            }
        }
Assets/Scripts/Enum/EndlessBossActionState.cs
@@ -14,6 +14,9 @@
        Summon,
        // 死亡
        Death
        Death,
        // 技能动作
        Skill
    }
}
Assets/Scripts/Enum/EndlessBossSkillAIType.cs
New file
@@ -0,0 +1,15 @@
/**
 * 无尽模式boss技能AI类型
 * @Author: chenxin
 * @Date: 2020-11-02 20:24:25
 */
namespace KTGMGemClient
{
    public enum EndlessBossSkillAIType
    {
        None,
        // 普通AI,每一波开始30s之后开始释放技能,技能cd好了就释放
        Normal
    }
}
Assets/Scripts/Enum/EndlessBossSkillAIType.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6c1ddd85189ce234189c2983299e9157
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Enum/EndlessBossSkillAgentType.cs
New file
@@ -0,0 +1,15 @@
/**
 * 无尽模式技能作用小怪类型
 * @Author: chenxin
 * @Date: 2020-11-02 16:32:12
 */
namespace KTGMGemClient
{
    public enum EndlessBossSkillAgentType
    {
        None,
        // 该赛道的所有小怪
        All
    }
}
Assets/Scripts/Enum/EndlessBossSkillAgentType.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 47c5507620b08d74bbf053a98f83681d
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Enum/EndlessBossSkillTowerType.cs
New file
@@ -0,0 +1,18 @@
/**
 * 无尽模式技能作用塔位类型
 * @Author: chenxin
 * @Date: 2020-11-02 16:31:13
 */
namespace KTGMGemClient
{
    public enum EndlessBossSkillTowerType
    {
        None,
        // 该赛道的所有塔
        All,
        // 单个塔,如果第一排塔被损坏,直接作用到第二排
        Single
    }
}
Assets/Scripts/Enum/EndlessBossSkillTowerType.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ccdf7d12c28e5c547b6add3c95d49f63
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Enum/EndlessBossSkillTunelType.cs
New file
@@ -0,0 +1,21 @@
/**
 * 无尽模式技能作用赛道类型
 * @Author: chenxin
 * @Date: 2020-11-02 16:32:48
 */
namespace KTGMGemClient
{
    public enum EndlessBossSkillTunelType
    {
        None,
        // 法阵中心位置
        Top,
        // 赛道中心
        Center,
        // 我方塔位前面
        Bottom
    }
}
Assets/Scripts/Enum/EndlessBossSkillTunelType.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: cfb0c0ef0c2c2d14c872be02be06944b
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Enum/EndlessBossSkillType.cs
New file
@@ -0,0 +1,21 @@
/**
 * 无尽模式boss技能类型
 * @Author: chenxin
 * @Date: 2020-11-02 16:33:34
 */
namespace KTGMGemClient
{
    public enum EndlessBossSkillType
    {
        None,
        // 魔法护盾
        ShieldWall,
        // 泡泡炸弹
        BubbleBomb,
        // 召唤木桩
        WoodPile
    }
}
Assets/Scripts/Enum/EndlessBossSkillType.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 16693698ec0738245931ef13e867b305
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Enum/EndlessBossSkillUseTarget.cs
New file
@@ -0,0 +1,25 @@
/**
 * 无尽模式boss技能作用对象
 * @Author: chenxin
 * @Date: 2020-11-02 15:08:35
 */
namespace KTGMGemClient
{
    /// <summary>
    /// 无尽模式技能作用对象
    /// </summary>
    public enum EndlessBossSkillUseTarget
    {
        // 无效类型
        None,
        // 我方的攻击塔位
        Tower,
        // 小怪
        Agent,
        // 赛道
        Tunel
    }
}
Assets/Scripts/Enum/EndlessBossSkillUseTarget.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e74fcfa6b178c2f40b0576817ccdcb58
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Enum/SpawnAgentType.cs
New file
@@ -0,0 +1,19 @@
/**
 * 代理类型
 * @Author: chenxin
 * @Date: 2020-11-03 19:59:35
 */
namespace KTGMGemClient
{
    public enum SpawnAgentType
    {
        // 普通怪,就是正常关卡出的小怪和boss,PVP里面的目前全部都是这种类型
        Normal,
        // 泡泡炸弹,在PVE模式里面,boss技能可以召唤炸弹和木桩等
        BubbleBomb,
        // 召唤木桩
        WoodPile
    }
}
Assets/Scripts/Enum/SpawnAgentType.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2380eb60ee8e31649ad585ff6f10cb84
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/Event/EventType.cs
@@ -49,6 +49,16 @@
        GuidePlayUpgradeEffect,
        // 无尽模式boss召唤结束
        EndlessBossSummonEnd,
        // 无尽模式新的波次开始
        EndlessBeginWave,
        // 无尽模式boss技能泡泡炸弹受到一次攻击
        EndlessBossSkillBubbleBombGetHit,
        // 无尽模式泡泡炸弹被火技能烧死
        EndlessFireSkillKillBubbleBomb,
        // 无尽模式泡泡炸弹被眩晕
        EndlessBubbleBombBeDizzinessed,
        // 闪烁boss技能title
        EndlessBossSkillGlintTitle,
    }
}
Assets/Scripts/Json/JsonDataCenter.cs
@@ -265,6 +265,8 @@
            EndlessEnemyData.Init();
            EndlessPortData.Init();
            EndlessBuffData.Init();
            EndlessBossData.Init();
            EndlessBossSkillData.Init();
        }
    }
}
Assets/Scripts/Net/NetExtends/Table.cs
@@ -466,10 +466,13 @@
        public List<int> target;
        
        // 技能范围
        public int tunnel;
        public List<int> tunnel;
        
        // 技能动作
        public int action;
        // 技能类型
        public int skill_class;
        
        // 技能效果
        public List<float> effect;
@@ -486,8 +489,9 @@
            _boss_skill.image = int.Parse(GameUtils.GetString(item[index++].ToString())); 
            _boss_skill.cool_down = int.Parse(GameUtils.GetString(item[index++].ToString())); 
            _boss_skill.target = GameUtils.GetIntList(item[index++]); 
            _boss_skill.tunnel = int.Parse(GameUtils.GetString(item[index++].ToString()));
            _boss_skill.tunnel = GameUtils.GetIntList(item[index++]);
            _boss_skill.action = int.Parse(GameUtils.GetString(item[index++].ToString())); 
            _boss_skill.skill_class = int.Parse(GameUtils.GetString(item[index++].ToString()));
            _boss_skill.effect = GameUtils.GetFloatList(item[index++]); 
            
            return _boss_skill;
Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs
@@ -12,43 +12,43 @@
namespace TowerDefense.Affectors
{
    /// <summary>
    /// The common effect for handling firing projectiles to attack
    ///
    /// Requires an ILauncher but it is not automatically added
    /// Add an ILauncher implementation to this GameObject before you add this script
    /// </summary>
    [RequireComponent(typeof(ILauncher))]
    public class AttackAffector : Affector, ITowerRadiusProvider
    {
        /// <summary>
        /// The projectile used to attack
        /// </summary>
        public GameObject projectile;
    /// <summary>
    /// The common effect for handling firing projectiles to attack
    ///
    /// Requires an ILauncher but it is not automatically added
    /// Add an ILauncher implementation to this GameObject before you add this script
    /// </summary>
    [RequireComponent(typeof(ILauncher))]
    public class AttackAffector : Affector, ITowerRadiusProvider
    {
        /// <summary>
        /// The projectile used to attack
        /// </summary>
        public GameObject projectile;
        //
        protected GameObject projectile1;
        protected GameObject projectile2;
        //
        protected GameObject projectile1;
        protected GameObject projectile2;
        /// <summary>
        /// The list of points to launch the projectiles from
        /// </summary>
        public Transform[] projectilePoints;
        /// <summary>
        /// The list of points to launch the projectiles from
        /// </summary>
        public Transform[] projectilePoints;
        /// <summary>
        /// The reference to the center point where the tower will search from
        /// </summary>
        public Transform epicenter;
        /// <summary>
        /// The reference to the center point where the tower will search from
        /// </summary>
        public Transform epicenter;
        /// <summary>
        /// Configuration for when the tower does splash damage
        /// </summary>
        public bool isMultiAttack;
        /// <summary>
        /// Configuration for when the tower does splash damage
        /// </summary>
        public bool isMultiAttack;
        /// <summary>
        /// 如果是多目标攻击,最多攻击目标
        /// </summary>
        public int maxAttackNum = 1;
        /// <summary>
        /// 如果是多目标攻击,最多攻击目标
        /// </summary>
        public int maxAttackNum = 1;
        /// <summary>
@@ -57,356 +57,361 @@
        public float fireRate;
        /// <summary>
        /// 是否木属性数据
        /// </summary>
        public bool bWoodAffector = false;
        /// <summary>
        /// 是否木属性数据
        /// </summary>
        public bool bWoodAffector = false;
        /// <summary>
        /// The audio source to play when firing
        /// </summary>
        public RandomAudioSource randomAudioSource;
        /// <summary>
        /// The audio source to play when firing
        /// </summary>
        public RandomAudioSource randomAudioSource;
        /// <summary>
        /// Gets the targetter
        /// </summary>
        public Targetter towerTargetter;
        /// <summary>
        /// Gets the targetter
        /// </summary>
        public Targetter towerTargetter;
        /// <summary>
        /// Color of effect radius visualization
        /// </summary>
        public Color radiusEffectColor;
        /// <summary>
        /// Color of effect radius visualization
        /// </summary>
        public Color radiusEffectColor;
        /// <summary>
        /// Search condition
        /// </summary>
        public Filter searchCondition;
        /// <summary>
        /// Search condition
        /// </summary>
        public Filter searchCondition;
        /// <summary>
        /// Fire condition
        /// </summary>
        public Filter fireCondition;
        /// <summary>
        /// Fire condition
        /// </summary>
        public Filter fireCondition;
        /// <summary>
        /// The reference to the attached launcher
        /// </summary>
        protected ILauncher m_Launcher;
        /// <summary>
        /// The reference to the attached launcher
        /// </summary>
        protected ILauncher m_Launcher;
        /// <summary>
        /// The time before firing is possible
        /// </summary>
        protected float m_FireTimer;
        /// <summary>
        /// The time before firing is possible
        /// </summary>
        protected float m_FireTimer;
        /// <summary>
        /// Reference to the current tracked enemy
        /// </summary>
        protected Targetable m_TrackingEnemy;
        /// <summary>
        /// Reference to the current tracked enemy
        /// </summary>
        protected Targetable m_TrackingEnemy;
        /// <summary>
        /// 处理装弹时间.
        /// </summary>
        protected float fillBulletTime = 0.0f;
        /// <summary>
        /// 处理装弹时间.
        /// </summary>
        protected float fillBulletTime = 0.0f;
        /// <summary>
        /// 充能时间
        /// </summary>
        protected float energyCalTime = 0;
        protected float fInEnergy = 0;
        protected float fBackupTimer = 0.0f;
        /// <summary>
        /// Gets the search rate from the targetter
        /// </summary>
        public float searchRate
        {
            get { return towerTargetter.searchRate; }
            set { towerTargetter.searchRate = value; }
        }
        /// <summary>
        /// Gets the targetable
        /// </summary>
        public Targetable trackingEnemy
        {
            get { return m_TrackingEnemy; }
        }
        /// <summary>
        /// Gets or sets the attack radius
        /// </summary>
        public float effectRadius
        {
            get { return towerTargetter.effectRadius; }
        }
        public Color effectColor
        {
            get { return radiusEffectColor; }
        }
        public Targetter targetter
        {
            get { return towerTargetter; }
        }
        /// <summary>
        /// Initializes the attack affector
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment)
        {
            Initialize(affectorAlignment, -1);
        }
        /// <summary>
        /// 返回可能存在的Targetter.
        /// </summary>
        /// <returns></returns>
        public override TowerDefense.Targetting.Targetter GetTargetter()
        {
            return targetter;
        }
        /// <summary>
        /// Initialises the  attack affector with a layer mask
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment, LayerMask mask)
        {
            base.Initialize(affectorAlignment, mask);
            SetUpTimers();
            towerTargetter.ResetTargetter();
            towerTargetter.alignment = affectorAlignment;
            towerTargetter.acquiredTarget += OnAcquiredTarget;
            towerTargetter.lostTarget += OnLostTarget;
        }
        void OnDestroy()
        {
            towerTargetter.acquiredTarget -= OnAcquiredTarget;
            towerTargetter.lostTarget -= OnLostTarget;
        }
        void OnLostTarget()
        {
            m_TrackingEnemy = null;
        }
        void OnAcquiredTarget(Targetable acquiredTarget)
        {
            m_TrackingEnemy = acquiredTarget;
        }
        public Damager damagerProjectile
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile1
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile2
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        /// <summary>
        /// Returns the total projectile damage
        /// </summary>
        public float GetProjectileDamage()
        {
            var splash = projectile.GetComponent<SplashDamager>();
            float splashDamage = splash != null ? splash.damage : 0;
            return damagerProjectile.finalDamage + splashDamage;
        }
        /// <summary>
        /// Initialise the RepeatingTimer
        /// </summary>
        protected virtual void SetUpTimers()
        {
            m_FireTimer = 1 / fireRate;
            m_Launcher = GetComponent<ILauncher>();
        }
        protected void updateTowerSkillData()
        protected float fInEnergy = 0;
        protected float fBackupTimer = 0.0f;
        /// <summary>
        /// Gets the search rate from the targetter
        /// </summary>
        public float searchRate
        {
            //
            // 预留出来装填子弹的时间.
            if (fillBulletTime > 0)
            {
                fillBulletTime -= Time.deltaTime;
                if (fillBulletTime <= 0.3f)
                {
                    if (towerPtr && towerPtr.bulletCtl)
                        towerPtr.bulletCtl.resetToMaxBullet();
                }
            get { return towerTargetter.searchRate; }
            set { towerTargetter.searchRate = value; }
        }
                if (fillBulletTime <= 0)
                {
                    fillBulletTime = 0;
                }
            }
        /// <summary>
        /// Gets the targetable
        /// </summary>
        public Targetable trackingEnemy
        {
            get { return m_TrackingEnemy; }
        }
            //
            // 充能时间的处理
            if( towerPtr && towerPtr.energyCtl)
        /// <summary>
        /// Gets or sets the attack radius
        /// </summary>
        public float effectRadius
        {
            get { return towerTargetter.effectRadius; }
        }
        public Color effectColor
        {
            get { return radiusEffectColor; }
        }
        public Targetter targetter
        {
            get { return towerTargetter; }
        }
        /// <summary>
        /// Initializes the attack affector
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment)
        {
            Initialize(affectorAlignment, -1);
        }
        /// <summary>
        /// 返回可能存在的Targetter.
        /// </summary>
        /// <returns></returns>
        public override TowerDefense.Targetting.Targetter GetTargetter()
        {
            return targetter;
        }
        /// <summary>
        /// Initialises the  attack affector with a layer mask
        /// </summary>
        public override void Initialize(IAlignmentProvider affectorAlignment, LayerMask mask)
        {
            base.Initialize(affectorAlignment, mask);
            SetUpTimers();
            towerTargetter.ResetTargetter();
            towerTargetter.alignment = affectorAlignment;
            towerTargetter.acquiredTarget += OnAcquiredTarget;
            towerTargetter.lostTarget += OnLostTarget;
        }
        void OnDestroy()
        {
            towerTargetter.acquiredTarget -= OnAcquiredTarget;
            towerTargetter.lostTarget -= OnLostTarget;
        }
        void OnLostTarget()
        {
            m_TrackingEnemy = null;
        }
        void OnAcquiredTarget(Targetable acquiredTarget)
        {
            // m_TrackingEnemy = acquiredTarget;
        }
        public Damager damagerProjectile
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile1
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        public Damager damagerProjectile2
        {
            get { return projectile == null ? null : projectile.GetComponent<Damager>(); }
        }
        /// <summary>
        /// Returns the total projectile damage
        /// </summary>
        public float GetProjectileDamage()
        {
            var splash = projectile.GetComponent<SplashDamager>();
            float splashDamage = splash != null ? splash.damage : 0;
            return damagerProjectile.finalDamage + splashDamage;
        }
        /// <summary>
        /// Initialise the RepeatingTimer
        /// </summary>
        protected virtual void SetUpTimers()
        {
            m_FireTimer = 1 / fireRate;
            m_Launcher = GetComponent<ILauncher>();
        }
        protected void updateTowerSkillData()
        {
            //
            // 预留出来装填子弹的时间.
            if (fillBulletTime > 0)
            {
                if( this.fInEnergy <= 0)
                fillBulletTime -= Time.deltaTime;
                if (fillBulletTime <= 0.3f)
                {
                    this.energyCalTime += Time.deltaTime;
                    float process = energyCalTime % 11.0f;
                    int proint = (int)Math.Floor(process);
                    proint += towerPtr.uiProOffset;
                    towerPtr.energyCtl.SetEnergyProcessFloat( process );
                    if (proint == 10)
                    {
                        fInEnergy = 5.0f;
                    if (towerPtr && towerPtr.bulletCtl)
                        towerPtr.bulletCtl.resetToMaxBullet();
                }
                        // 设置多倍攻击速度
                        fBackupTimer = m_FireTimer;
                        m_FireTimer = m_FireTimer / 3.0f;
                if (fillBulletTime <= 0)
                {
                    fillBulletTime = 0;
                }
            }
                        towerPtr.uiProOffset = 0;
                        towerPtr.PlayEnergyEffect(true);
                    }
            //
            // 充能时间的处理
            if (towerPtr && towerPtr.energyCtl)
            {
                if (this.fInEnergy <= 0)
                {
                    this.energyCalTime += Time.deltaTime;
                    float process = energyCalTime % 11.0f;
                    int proint = (int)Math.Floor(process);
                    proint += towerPtr.uiProOffset;
                    towerPtr.energyCtl.SetEnergyProcessFloat(process);
                    if (proint == 10)
                    {
                        fInEnergy = 5.0f;
                        // 设置多倍攻击速度
                        fBackupTimer = m_FireTimer;
                        m_FireTimer = m_FireTimer / 3.0f;
                        towerPtr.uiProOffset = 0;
                        towerPtr.PlayEnergyEffect(true);
                    }
                }
                else
                {
                    fInEnergy -= Time.deltaTime;
                    if( fInEnergy <= 0)
                    fInEnergy -= Time.deltaTime;
                    if (fInEnergy <= 0)
                    {
                        EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.FireTowerChargeEnd);
                        fInEnergy = 0.0f;
                        this.energyCalTime = 0.0f;
                        towerPtr.energyCtl.SetEnergyProgress(0);
                        fInEnergy = 0.0f;
                        this.energyCalTime = 0.0f;
                        towerPtr.energyCtl.SetEnergyProgress(0);
                        // 恢复正常攻击速度
                        m_FireTimer = fBackupTimer;
                        // 恢复正常攻击速度
                        m_FireTimer = fBackupTimer;
                        towerPtr.PlayEnergyEffect(false);
                        towerPtr.PlayEnergyEffect(false);
                    }
                }
                    }
                }
            }
        }
            }
        }
        /// <summary>
        /// Update the timers
        /// </summary>
        protected virtual void Update()
        {
            // 处理当前Affector所在Tower对应的技能
            updateTowerSkillData();
        /// <summary>
        /// Update the timers
        /// </summary>
        protected virtual void Update()
        {
            // Agent 和 Tower 身上都有 AttackAffector,如果获取不到 ILauncher 说明是 Agent
            // 目前为止,Agent 并不需要发射子弹攻击
            if (m_Launcher == null) return;
            m_FireTimer -= Time.deltaTime;
            if( trackingEnemy == null )
                m_TrackingEnemy = targetter.GetTarget(waveLineID, bWoodAffector);
            if (trackingEnemy != null && m_FireTimer <= 0.0f)
            {
                OnFireTimer();
                m_FireTimer = 1 / fireRate;
            // 处理当前Affector所在Tower对应的技能
            updateTowerSkillData();
                // 多倍攻速:
                if (fInEnergy > 0.0f)
                    m_FireTimer = m_FireTimer / 3.0f;
            }
        }
        /// <summary>
        /// Fired at every poll of the fire rate timer
        /// </summary>
        protected virtual void OnFireTimer()
        {
            if (fireCondition != null)
            {
                if (!fireCondition())
                {
                    return;
                }
            }
            FireProjectile();
        }
        /// <summary>
        /// Common logic when attacking
        /// 调用攻击的核心函数,由这个函数发起真正的攻击,多目标或者单目标
        /// </summary>
        protected virtual void FireProjectile()
        {
            // 不再处理多子弹攻击,确保只有一个弹道
            isMultiAttack = false;
            m_TrackingEnemy = targetter.GetTarget( waveLineID, bWoodAffector );
            if ( (m_TrackingEnemy == null) || (fillBulletTime>0) )
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(false);
                return;
            }else
            m_FireTimer -= Time.deltaTime;
            if (trackingEnemy == null)
                m_TrackingEnemy = targetter.GetTarget(waveLineID, bWoodAffector);
            if (trackingEnemy != null && m_FireTimer <= 0.0f)
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(true);
                OnFireTimer();
                m_FireTimer = 1 / fireRate;
                // 多倍攻速:
                if (fInEnergy > 0.0f)
                    m_FireTimer = m_FireTimer / 3.0f;
            }
        }
        /// <summary>
        /// Fired at every poll of the fire rate timer
        /// </summary>
        protected virtual void OnFireTimer()
        {
            if (fireCondition != null)
            {
                if (!fireCondition())
                {
                    return;
                }
            }
            FireProjectile();
        }
        /// <summary>
        /// Common logic when attacking
        /// 调用攻击的核心函数,由这个函数发起真正的攻击,多目标或者单目标
        /// </summary>
        protected virtual void FireProjectile()
        {
            // 不再处理多子弹攻击,确保只有一个弹道
            isMultiAttack = false;
            m_TrackingEnemy = targetter.GetTarget(waveLineID, bWoodAffector);
            if ((m_TrackingEnemy == null) || (fillBulletTime > 0))
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(false);
                return;
            }
            else
            {
                if (this.towerPtr)
                    towerPtr.setTowerState(true);
            }
            //
            // 处理子弹充能相关的内容
            if( towerPtr && (towerPtr.bulletCtl != null))
            //
            // 处理子弹充能相关的内容
            if (towerPtr && (towerPtr.bulletCtl != null))
            {
                int bnum = towerPtr.bulletCtl.decBullet();
                //
                if (bnum == 0)
                {
                    damagerProjectile.damageMulti = 2.0f;
                    fillBulletTime = 2.0f;
                }
                int bnum = towerPtr.bulletCtl.decBullet();
                //
                if (bnum == 0)
                {
                    damagerProjectile.damageMulti = 2.0f;
                    fillBulletTime = 2.0f;
                }
            }
            if (isMultiAttack)
            {
                List<Targetable> enemies = towerTargetter.GetAllTargets();
                if( (enemies != null)&&(Targetter.bSearchTarget) )
                    m_Launcher.Launch(enemies, projectile, projectilePoints,this.maxAttackNum);
            }
            else
            {
                if(Targetter.bSearchTarget )
                    m_Launcher.Launch(m_TrackingEnemy, damagerProjectile.gameObject, projectilePoints);
            }
            if (randomAudioSource != null)
            {
                if( Targetter.bSearchTarget )
                    randomAudioSource.PlayRandomClip();
            }
        }
            if (isMultiAttack)
            {
                List<Targetable> enemies = towerTargetter.GetAllTargets();
                if ((enemies != null) && (Targetter.bSearchTarget))
                    m_Launcher.Launch(enemies, projectile, projectilePoints, this.maxAttackNum);
            }
            else
            {
                if (Targetter.bSearchTarget)
                    m_Launcher.Launch(m_TrackingEnemy, damagerProjectile.gameObject, projectilePoints);
            }
            if (randomAudioSource != null)
            {
                if (Targetter.bSearchTarget)
                    randomAudioSource.PlayRandomClip();
            }
        }
        /// <summary>
        /// A delegate to compare distances of components
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        protected virtual int ByDistance(Targetable first, Targetable second)
        {
            float firstSqrMagnitude = Vector3.SqrMagnitude(first.position - epicenter.position);
            float secondSqrMagnitude = Vector3.SqrMagnitude(second.position - epicenter.position);
            return firstSqrMagnitude.CompareTo(secondSqrMagnitude);
        }
        /// <summary>
        /// A delegate to compare distances of components
        /// </summary>
        /// <param name="first"></param>
        /// <param name="second"></param>
        protected virtual int ByDistance(Targetable first, Targetable second)
        {
            float firstSqrMagnitude = Vector3.SqrMagnitude(first.position - epicenter.position);
            float secondSqrMagnitude = Vector3.SqrMagnitude(second.position - epicenter.position);
            return firstSqrMagnitude.CompareTo(secondSqrMagnitude);
        }
#if UNITY_EDITOR
        /// <summary>
        /// Draws the search area
        /// </summary>
        void OnDrawGizmosSelected()
        {
            Gizmos.DrawWireSphere(epicenter.position, towerTargetter.effectRadius);
        }
        /// <summary>
        /// Draws the search area
        /// </summary>
        void OnDrawGizmosSelected()
        {
            Gizmos.DrawWireSphere(epicenter.position, towerTargetter.effectRadius);
        }
#endif
    }
    }
    /// <summary>
    /// A delegate for boolean calculation logic
    /// </summary>
    public delegate bool Filter();
    /// <summary>
    /// A delegate for boolean calculation logic
    /// </summary>
    public delegate bool Filter();
}
Assets/Scripts/TowerDefense/Agents/Agent.cs
@@ -209,6 +209,7 @@
        public bool bInDeathState
        {
            get { return this.bInDeathAct; }
            set { bInDeathAct = value; }
        }
        /// <summary>
@@ -243,8 +244,10 @@
        /// </summary>
        protected bool nodeMoveUpdate = false;
        /// <summary>
        /// 代理的类型
        /// </summary>
        public SpawnAgentType AgentType { get; set; } = SpawnAgentType.Normal;
        /// <summary>
        /// Accessor to <see cref="m_NavMeshAgent"/>
Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs
New file
@@ -0,0 +1,101 @@
using Core.Utilities;
using UnityEngine;
/**
 * 泡泡炸弹
 * @Author: chenxin
 * @Date: 2020-11-03 17:26:27
 */
namespace TowerDefense.Agents
{
    public class BubbleBombAgent : Agent
    {
        /// <summary>
        /// 外部赋值,唯一标识一个泡泡炸弹代理
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 正常的特效
        /// </summary>
        public ParticleSystem NormalEffect;
        /// <summary>
        /// 爆炸的特效
        /// </summary>
        public ParticleSystem ExplodeEffect;
        /// <summary>
        /// Peforms the relevant path update
        /// 执行相关路径更新
        /// </summary>
        protected override void PathUpdate()
        {
        }
        /// <summary>
        /// The behaviour for when the agent has been blocked
        /// 代理被阻止时的行为
        /// </summary>
        protected override void OnPartialPathUpdate()
        {
        }
        /// <summary>
        /// 重置数据
        /// </summary>
        public void Reset()
        {
            bInDeathState = false;
        }
        /// <summary>
        /// 播放正常状态的特效
        /// </summary>
        public void PlayNormalEffect()
        {
            NormalEffect.Play();
        }
        /// <summary>
        /// 停止正常状态的特效
        /// </summary>
        public void StopNormalEffect()
        {
            NormalEffect.Stop();
            NormalEffect.Clear();
        }
        /// <summary>
        /// 播放爆炸的特效
        /// </summary>
        public void PlayExplodeEffect()
        {
            ExplodeEffect.Play();
        }
        /// <summary>
        /// 停止爆炸特效
        /// </summary>
        public void StopExplodeEffect()
        {
            ExplodeEffect.Stop();
            ExplodeEffect.Clear();
        }
        /// <summary>
        /// 获取爆炸特效持续时间,该时间过后会回收gameObject
        /// </summary>
        public float GetExplodeTime()
        {
            return 1.15f;
        }
        protected override void Update()
        {
        }
    }
}
Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a92cd5a2e6e04f84aa172ab3a5f342a1
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/Level/AgentInsManager.cs
@@ -61,7 +61,15 @@
    /// <returns></returns>
    public int getAgentInsNum()
    {
        return this.agentInsList.Count;
        int ret = 0;
        for (int i = 0; i < agentInsList.Count; ++i)
        {
            if (agentInsList[i].AgentType == SpawnAgentType.Normal)
                ++ret;
        }
        return ret;
    }
    /// <summary>
@@ -640,35 +648,49 @@
        if (slinfo.atcmod.Count < 2) return;
        float radius = slinfo.atcmod[1];
        for (int ti = 0; ti < mgrList.Length; ti++)
        {
            WaveLineAgentInsMgr mgr = mgrList[ti];
            for (int idx = 0; idx < mgr.listAgent.Count; idx++)
            {
                Agent eag = mgr.listAgent[idx];
                Vector3 fpos = eag.transform.position;
                fpos.y = 0;
                float dist = Vector3.Distance(fpos, pos);
                if (radius < dist)
                    continue;
                float damage = slinfo.skilleffect[2];
                damage += (slinfo.skilleffect[1] / 100.0f * eag.configuration.maxHealth);
                damage = (float)Math.Floor(damage);
                eag.TakeDamage(damage, fpos, null);
                if (!eag.opponentAgent)
                if (eag.AgentType == SpawnAgentType.BubbleBomb)
                {
                    if (GameUI.instanceExists)
                        GameUI.instance.generateBloodText(fpos, damage, false, false);
                    else if (EndlessGameUI.instanceExists)
                        EndlessGameUI.instance.generateBloodText(fpos, damage, false, false);
                    buffinfo bufdata = JsonDataCenter.GetBuffFromId(3);
                    if (bufdata != null)
                    {
                        if (bufdata.buff_func[0] == 3)
                            EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBubbleBombBeDizzinessed, (eag as BubbleBombAgent).Id, bufdata.last);
                    }
                }
                if (eag.isDead)
                    continue;
                else
                    eag.SetAgentBuffEffect(3);
                {
                    Vector3 fpos = eag.transform.position;
                    fpos.y = 0;
                    float dist = Vector3.Distance(fpos, pos);
                    if (radius < dist)
                        continue;
                    float damage = slinfo.skilleffect[2];
                    damage += (slinfo.skilleffect[1] / 100.0f * eag.configuration.maxHealth);
                    damage = (float)Math.Floor(damage);
                    eag.TakeDamage(damage, fpos, null);
                    if (!eag.opponentAgent)
                    {
                        if (GameUI.instanceExists)
                            GameUI.instance.generateBloodText(fpos, damage, false, false);
                        else if (EndlessGameUI.instanceExists)
                            EndlessGameUI.instance.generateBloodText(fpos, damage, false, false);
                    }
                    if (eag.isDead)
                        continue;
                    else
                        eag.SetAgentBuffEffect(3);
                }
            }
        }
@@ -697,25 +719,32 @@
            wavelineIns = agentWaveLineArray[waveline];
        if (wavelineIns == null) return;
        List<Agent> listAg = wavelineIns.listAgent;
        for (int ti = listAg.Count - 1; ti >= 0; ti--)
        {
            Agent eag = listAg[ti];
            Vector3 fpos = eag.transform.position;
            float damage = slinfo.skilleffect[2];
            damage += (slinfo.skilleffect[1] / 100.0f * eag.configuration.maxHealth);
            damage = (float)Math.Floor(damage);
            eag.TakeDamage(damage, fpos, null);
            if (!eag.opponentAgent)
            if (eag.AgentType == SpawnAgentType.BubbleBomb)
                EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessFireSkillKillBubbleBomb, (eag as BubbleBombAgent).Id);
            else
            {
                if (GameUI.instanceExists)
                    GameUI.instance.generateBloodText(fpos, damage, false, false);
                else if (EndlessGameUI.instanceExists)
                    EndlessGameUI.instance.generateBloodText(fpos, damage, false, false);
                Vector3 fpos = eag.transform.position;
                float damage = slinfo.skilleffect[2];
                damage += (slinfo.skilleffect[1] / 100.0f * eag.configuration.maxHealth);
                damage = (float)Math.Floor(damage);
                eag.TakeDamage(damage, fpos, null);
                if (!eag.opponentAgent)
                {
                    if (GameUI.instanceExists)
                        GameUI.instance.generateBloodText(fpos, damage, false, false);
                    else if (EndlessGameUI.instanceExists)
                        EndlessGameUI.instance.generateBloodText(fpos, damage, false, false);
                }
            }
        }
    }
    /// <summary>
Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs
@@ -169,6 +169,51 @@
        private bool isStopSecondWaveCompleted = false;
        /// <summary>
        /// 赛道长度
        /// </summary>
        private float tunelLength = 31.94f;
        private List<Vector3> homeBasePositionList;
        /// <summary>
        /// 根据赛道id(1~5)获得基地坐标
        /// </summary>
        /// <param name="tunelId"></param>
        /// <returns></returns>
        public Vector3 GetHomeBasePosition(int tunelId)
        {
            return homeBasePositionList[tunelId - 1];
        }
        /// <summary>
        /// 根据赛道id(1~5)和赛道类型获得世界坐标
        /// </summary>
        /// <param name="tunelId"></param>
        /// <param name="tunelType"></param>
        public Vector3 GetTunelWorldPosition(int tunelId, EndlessBossSkillTunelType tunelType)
        {
            Vector3 startPos = StartingNodeList[tunelId - 1].transform.position;
            Vector3 ret = new Vector3(startPos.x, startPos.y, startPos.z);
            float add = 0;
            switch (tunelType)
            {
                case EndlessBossSkillTunelType.Top:
                    break;
                case EndlessBossSkillTunelType.Center:
                    add = -(tunelLength / 2);
                    break;
                case EndlessBossSkillTunelType.Bottom:
                    add = -tunelLength;
                    break;
            }
            ret.z += add;
            return ret;
        }
        /// <summary>
        /// 切换基地
        /// </summary>
        /// <param name="index">列索引</param>
@@ -297,6 +342,18 @@
        {
            EndlessBuffSelect.instance.BuffSelectCompleted += OnBuffSelectCompleted;
            EndlessGameUI.instance.GameOverEvent += SafelyCallLevelCompleted;
            homeBasePositionList = new List<Vector3>();
            for (int i = 0; i < StartingNodeList.Count; ++i)
            {
                Vector3 startPos = StartingNodeList[i].transform.position;
                Vector3 pos = new Vector3();
                pos.x = startPos.x;
                pos.y = startPos.y;
                pos.z = startPos.z - tunelLength;
                homeBasePositionList.Add(pos);
            }
        }
        /// <summary>
@@ -313,7 +370,8 @@
            if (!isBuffSelectCompleted)
            {
                isBuffSelectCompleted = true;
                WaveManager.InitPort(CurrentLevel);
                if (CurrentLevel > startLevel)
                    WaveManager.InitPort(CurrentLevel);
                EndlessUIStart.instance.Restart();
                WaveManager.StartWaves(CurrentLevel);
            }
@@ -360,6 +418,7 @@
        protected virtual void AllWaveCompleted()
        {
            IsAllWaveCompleted = true;
            EndlessBossSkillManager.instance.ClearSkillList();
        }
        /// <summary>
Assets/Scripts/TowerDefense/Level/EndlessWave.cs
@@ -112,10 +112,6 @@
            isWaveStoped = false;
        }
        /// <summary>
        /// Handles spawning the current agent and sets up the next agent for spawning
        /// 在场景内孵化出来一个Boss,这个核心函数最后被规则性的数据接管
        /// </summary>
        protected virtual void SpawnCurrent()
        {
            if (isWaveStoped) return;
@@ -129,8 +125,15 @@
            else
            {
                ++spawnedEnemies;
                if (SpawnNewAgent != null)
                    SpawnNewAgent();
                if (spawnedEnemies >= waveData.Config.amount)
                {
                    StopWave();
                    SafelyBroadcastWaveCompletedEvent();
                }
            }
        }
@@ -170,7 +173,6 @@
            newAgent.healthBar.SetHealthLevel(1);
            // 加入Manager统一管理.
            AgentInsManager.instance.addAgent(newAgent);
            if (isDouble)
            {
@@ -224,7 +226,7 @@
        }
        /// <summary>
        /// 暂时先这么处理
        /// 暂时先这么处理 cx test
        /// </summary>
        /// <param name="resId">endless_enemy表的资源id</param>
        /// <returns>所有可选的agent列表的索引</returns>
Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs
@@ -144,9 +144,18 @@
        /// <param name="level"></param>
        public void InitPort(int level)
        {
            EndlessPortData.InitPortList();
            InitPortData(level);
            InitWaveData();
            RefreshBoss();
            if (!GameConfig.IsNewbie)
            {
                endless_boss bossData = EndlessBossData.GetDataById(waveData[0].Config.resource);
                if (bossData != null)
                    EndlessBossSkillManager.instance.Init(bossData.skill);
            }
        }
        /// <summary>
@@ -291,7 +300,11 @@
            }
            if (TotalWaveLines != 0)
            {
                isWaveStarted = true;
                EndlessBossSkillManager.instance.Restart();
                EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBeginWave);
            }
        }
        /// <summary>
@@ -366,6 +379,7 @@
                // 更新波索引
                ++CurrentWaveIndex;
                EndlessBuffManager.instance.UpdateBuffList();
                EndlessBossSkillManager.instance.Reset();
                EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessCompletedPort, Level, CurrentWaveIndex);
                if (CurrentWaveIndex >= TotalWaves)
Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs
@@ -343,7 +343,7 @@
        }
        void FixedUpdate()
        {
            this.resizeBuyButtonSize(this.buyButtonScaler);
            // this.resizeBuyButtonSize(this.buyButtonScaler);
        }
        void Update()
Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -32,8 +32,41 @@
        /// </summary>
        public float attackRise { get; set; }
        /// <summary>
        /// 处理代理收到的伤害,这里需要判断代理的类型分别去处理
        /// </summary>
        /// <param name="enemy"></param>
        public void DealDamage(Targetable enemy)
        {
            switch ((enemy as Agent).AgentType)
            {
                case SpawnAgentType.Normal:
                    HandleNormal(enemy);
                    break;
                case SpawnAgentType.BubbleBomb:
                    HandleBubbleBomb(enemy);
                    break;
                case SpawnAgentType.WoodPile:
                    break;
            }
        }
        /// <summary>
        /// 处理泡泡炸弹收到的伤害
        /// </summary>
        /// <param name="enemy"></param>
        private void HandleBubbleBomb(Targetable enemy)
        {
            // 泡泡炸弹伤害是以次数计算的
            EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (enemy as BubbleBombAgent).Id);
        }
        /// <summary>
        /// 处理普通小怪和boss收到的伤害
        /// </summary>
        /// <param name="enemy"></param>
        private void HandleNormal(Targetable enemy)
        {
            float finalDamage = damager.finalDamage;
            bool crit = damager.isCrit;
            if (crit)
Assets/Scripts/TowerDefense/UI/EndlessBossCtrl.cs
@@ -1,6 +1,8 @@
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Core.Utilities;
/**
@@ -22,10 +24,13 @@
        /// </summary>
        public EndlessBossActionState ActionState { get; set; }
        public Image Title;
        // Start is called before the first frame update
        private void Start()
        {
            ColorVal = 0;
            EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitle, Glint);
        }
        // Update is called once per frame
@@ -34,6 +39,35 @@
        }
        private void Glint()
        {
            //设置一个DOTween队列
            Sequence flashSeq = DOTween.Sequence();
            Color c = Title.color;
            c.a = 0;
            Title.color = c;
            Title.gameObject.SetActive(true);
            flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 1, 0.3f));
            flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 0, 0.15f));
            flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 1, 0.3f));
            flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 0, 0.15f));
            flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 1, 0.3f));
            flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 0, 0.15f));
        }
        private float ColorVal
        {
            get { return Title.color.a; }
            set
            {
                Title.gameObject.SetActive(value != 0);
                Color c = Title.color;
                c.a = value;
                Title.color = c;
            }
        }
        /// <summary>
        /// 帧事件
        /// </summary>
Assets/Scripts/TowerDefense/UI/EndlessBossSkill.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dc8c9b67f835de24cbc9408979359b09
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs
New file
@@ -0,0 +1,409 @@
using TowerDefense.UI.HUD;
using Core.Utilities;
using System.Collections.Generic;
using UnityEngine;
using TowerDefense.Agents;
using TowerDefense.Level;
/**
 * 泡泡炸弹
 * @Author: chenxin
 * @Date: 2020-11-02 17:09:03
 */
namespace KTGMGemClient
{
    public class BubbleBombConfig
    {
        public BubbleBombAgent Agent { get; set; }
        /// <summary>
        /// 需要被攻击的次数,攻击 * 次炸弹才会被销毁
        /// </summary>
        public int NeedAttackCount { get; set; }
        /// <summary>
        /// 已经被攻击的次数
        /// </summary>
        public int AttackCount { get; set; }
        /// <summary>
        /// 是否抵达基地,抵达基地后,不能继续被塔攻击
        /// </summary>
        public bool IsArrived { get; set; }
        /// <summary>
        /// 出生点坐标
        /// </summary>
        public Vector3 StartPosition { get; set; }
        /// <summary>
        /// 目的地坐标,也就是基地位置
        /// </summary>
        public Vector3 TargetPosition { get; set; }
        /// <summary>
        /// 是否被攻击打死,被塔打死或者被火技能宝石打死(火技能宝石是直接秒杀炸弹的)
        /// </summary>
        public bool IsAttackDeath { get; set; }
        /// <summary>
        /// 销毁时间,被塔打死或者攻击玩家基地后,时间减为0之后销毁
        /// </summary>
        public float DestroyTime { get; set; }
        /// <summary>
        /// 移动速度
        /// </summary>
        public float MoveSpeed { get; set; }
        /// <summary>
        /// 是否被眩晕
        /// </summary>
        public bool IsDizzinessed { get; set; }
        /// <summary>
        /// 眩晕时间
        /// </summary>
        public float DizzinessTime { get; set; }
        /// <summary>
        /// 是否是攻击状态,延时取摧毁基地
        /// </summary>
        public bool IsAttack { get; set; }
        public float AttackTime { get; set; }
    }
    public class BossSkillBubbleBomb : EndlessBossSkill
    {
        public BossSkillBubbleBomb(boss_skill param) : base(param)
        {
            random = new System.Random();
        }
        /// <summary>
        /// 被攻击的次数
        /// </summary>
        protected int beAttackedCount;
        protected string prefabPath = "Prefabs/Endless/BubbleBomb";
        /// <summary>
        /// 所有存在于场景中的泡泡炸弹
        /// </summary>
        protected List<BubbleBombConfig> bubbleBombList;
        protected System.Random random;
        /// <summary>
        /// 释放技能
        /// </summary>
        public override void ReleaseSkill()
        {
            base.ReleaseSkill();
            Debug.Log("--------------------- 泡泡炸弹释放 ---------------------");
            // cx test
            SpawnBubbleBomb();
        }
        /// <summary>
        /// 在场景中生成泡泡炸弹
        /// </summary>
        protected void SpawnBubbleBomb()
        {
            switch ((EndlessBossSkillUseTarget)SkillData.target[0])
            {
                case EndlessBossSkillUseTarget.Tower:
                    Debug.Log("--------------------- WTF 不支持哦~ ---------------------");
                    break;
                case EndlessBossSkillUseTarget.Agent:
                    Debug.Log("--------------------- WTF 不支持哦~ ---------------------");
                    break;
                case EndlessBossSkillUseTarget.Tunel:
                    EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitle);
                    SpawnOnTunel();
                    break;
            }
        }
        /// <summary>
        /// 在赛道上生成炸弹
        /// </summary>
        protected void SpawnOnTunel()
        {
            // 有可能只在某一条赛道生成,也有可能在所有赛道生成
            List<int> tunelIdList = GetTunelList();
            GameObject prefab = Resources.Load<GameObject>(prefabPath);
            for (int i = 0; i < tunelIdList.Count; ++i)
            {
                Poolable poolable = Poolable.TryGetPoolable<Poolable>(prefab);
                BubbleBombAgent bubbleBomb = poolable.GetComponent<BubbleBombAgent>();
                // 分配唯一id
                bubbleBomb.Id = GameUtils.GetId();
                bubbleBomb.waveLineID = tunelIdList[i] - 1;
                bubbleBomb.AgentType = SpawnAgentType.BubbleBomb;
                bubbleBomb.opponentAgent = false;
                // 出生位置
                Vector3 spawnPosition = EndlessLevelManager.instance.GetTunelWorldPosition(tunelIdList[i], (EndlessBossSkillTunelType)SkillData.target[1]);
                bubbleBomb.transform.position = spawnPosition;
                bubbleBomb.PlayNormalEffect();
                AgentInsManager.instance.addAgent(bubbleBomb);
                BubbleBombConfig config = new BubbleBombConfig();
                config.Agent = bubbleBomb;
                config.NeedAttackCount = (int)SkillData.effect[0];
                config.StartPosition = spawnPosition;
                config.TargetPosition = EndlessLevelManager.instance.GetHomeBasePosition(tunelIdList[i]);
                config.DestroyTime = bubbleBomb.GetExplodeTime();
                config.MoveSpeed = SkillData.effect[1];
                bubbleBombList.Add(config);
            }
        }
        /// <summary>
        /// 获取赛道列表
        /// </summary>
        protected List<int> GetTunelList()
        {
            List<int> tunelIdList = new List<int>();
            // cx test 后面改
            int configTunel = SkillData.tunnel[0];
            if (configTunel <= 5)
                // 直接对应具体的一条赛道
                tunelIdList.Add(configTunel);
            else if (configTunel == 6)
            {
                // 所有赛道
                for (int i = 1; i <= 5; ++i)
                {
                    tunelIdList.Add(i);
                }
            }
            else if (configTunel == 7)
                // 随机一条
                tunelIdList.Add(random.Next(1, 6));
            return tunelIdList;
        }
        public override void Reset()
        {
            base.Reset();
            beAttackedCount = 0;
            ClearBubbleBomb();
        }
        public override void Clear()
        {
            base.Clear();
            ClearBubbleBomb();
        }
        /// <summary>
        /// 清理在场景中的所有炸弹
        /// </summary>
        private void ClearBubbleBomb()
        {
            for (int i = 0; i < bubbleBombList.Count; ++i)
            {
                bubbleBombList[i].Agent.Reset();
                bubbleBombList[i].Agent.StopNormalEffect();
                bubbleBombList[i].Agent.StopExplodeEffect();
                if (!bubbleBombList[i].Agent.bInDeathState)
                    AgentInsManager.instance.removeAgent(bubbleBombList[i].Agent);
                Poolable.TryPool(bubbleBombList[i].Agent.gameObject);
            }
            bubbleBombList.Clear();
        }
        public override void Init()
        {
            base.Init();
            Debug.Log("--------------------- 泡泡炸弹技能初始化 ---------------------");
            bubbleBombList = new List<BubbleBombConfig>();
        }
        protected override void AddEvent()
        {
            EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, OnGetHit);
            EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessFireSkillKillBubbleBomb, OnFireSkillKillBubbleBomb);
            EventCenter.Ins.Add<int, int>((int)KTGMGemClient.EventType.EndlessBubbleBombBeDizzinessed, OnBubbleBombBeDizzinessed);
        }
        protected override void RemoveEvent()
        {
            EventCenter.Ins.Remove<int>((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, OnGetHit);
            EventCenter.Ins.Remove<int>((int)KTGMGemClient.EventType.EndlessFireSkillKillBubbleBomb, OnFireSkillKillBubbleBomb);
            EventCenter.Ins.Remove<int, int>((int)KTGMGemClient.EventType.EndlessBubbleBombBeDizzinessed, OnBubbleBombBeDizzinessed);
        }
        /// <summary>
        /// 泡泡炸弹受到一次攻击
        /// </summary>
        /// <param name="id">炸弹代理的唯一id</param>
        private void OnGetHit(int id)
        {
            for (int i = 0; i < bubbleBombList.Count; ++i)
            {
                if (bubbleBombList[i].Agent.Id == id)
                {
                    BubbleBombConfig config = bubbleBombList[i];
                    // 攻击次数够了被打死了 或者 达到基地了
                    if (config.Agent.bInDeathState) return;
                    ++config.AttackCount;
                    if (config.AttackCount >= config.NeedAttackCount)
                        AgentDead(config);
                    break;
                }
            }
        }
        /// <summary>
        /// 泡泡炸弹被火技能烧死
        /// </summary>
        /// <param name="id"></param>
        private void OnFireSkillKillBubbleBomb(int id)
        {
            for (int i = 0; i < bubbleBombList.Count; ++i)
            {
                if (bubbleBombList[i].Agent.Id == id)
                {
                    BubbleBombConfig config = bubbleBombList[i];
                    if (config.Agent.bInDeathState) return;
                    AgentDead(config);
                    break;
                }
            }
        }
        /// <summary>
        /// 泡泡炸弹被眩晕
        /// </summary>
        /// <param name="id"></param>
        /// <param name="duration">持续时间</param>
        private void OnBubbleBombBeDizzinessed(int id, int duration)
        {
            for (int i = 0; i < bubbleBombList.Count; ++i)
            {
                if (bubbleBombList[i].Agent.Id == id)
                {
                    BubbleBombConfig config = bubbleBombList[i];
                    if (config.Agent.bInDeathState) return;
                    config.IsDizzinessed = true;
                    config.Agent.CanMove = false;
                    // 直接覆盖持续时间
                    config.DizzinessTime = duration / 1000f;
                    break;
                }
            }
        }
        /// <summary>
        /// 炸弹突然去世
        /// </summary>
        /// <param name="config"></param>
        private void AgentDead(BubbleBombConfig config)
        {
            config.Agent.StopNormalEffect();
            config.Agent.PlayExplodeEffect();
            AgentInsManager.instance.removeAgent(config.Agent);
            config.Agent.bInDeathState = true;
            config.IsAttackDeath = true;
        }
        /// <summary>
        /// 炸弹到达基地
        /// </summary>
        /// <param name="config"></param>
        private void AgentArrived(BubbleBombConfig config)
        {
            config.IsArrived = true;
            config.Agent.StopNormalEffect();
            config.Agent.PlayExplodeEffect();
            AgentInsManager.instance.removeAgent(config.Agent);
            config.Agent.bInDeathState = true;
        }
        public override void Update(float deltaTime)
        {
            base.Update(deltaTime);
            for (int i = 0; i < bubbleBombList.Count; ++i)
            {
                if (bubbleBombList[i] == null) continue;
                BubbleBombConfig config = bubbleBombList[i];
                if (config.IsAttack)
                {
                    config.AttackTime -= deltaTime;
                    if (config.AttackTime <= 0)
                    {
                        EndlessGameUI.instance.DestroyTowerGrid(config.Agent.waveLineID);
                        config.IsAttack = false;
                    }
                }
                // 被打死了 或 到达基地
                if (config.IsAttackDeath || config.IsArrived)
                {
                    config.DestroyTime -= deltaTime;
                    if (config.DestroyTime <= 0)
                    {
                        bubbleBombList[i].Agent.Reset();
                        Poolable.TryPool(bubbleBombList[i].Agent.gameObject);
                        bubbleBombList.Remove(bubbleBombList[i]);
                        --i;
                    }
                    continue;
                }
                // 处理被眩晕的
                if (config.IsDizzinessed)
                {
                    config.DizzinessTime -= deltaTime;
                    if (config.DizzinessTime <= 0)
                    {
                        // 解除眩晕
                        config.IsDizzinessed = false;
                        config.Agent.CanMove = true;
                    }
                    else continue;
                }
                // 更新移动
                if (!config.Agent.bInDeathState && config.Agent.CanMove)
                {
                    Vector3 pos = config.Agent.transform.position;
                    pos.z -= deltaTime * config.MoveSpeed;
                    config.Agent.transform.position = pos;
                    if (pos.z <= config.TargetPosition.z)
                    {
                        AgentArrived(config);
                        config.IsAttack = true;
                        config.AttackTime = 0.65f;
                    }
                }
            }
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ee97c7099a8839949be5597efdc9ce55
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillShieldWall.cs
New file
@@ -0,0 +1,28 @@
using UnityEngine;
/**
 * 魔法护盾
 * @Author: chenxin
 * @Date: 2020-11-02 17:13:58
 */
namespace KTGMGemClient
{
    public class BossSkillShieldWall : EndlessBossSkill
    {
        public BossSkillShieldWall(boss_skill param) : base(param) { }
        /// <summary>
        /// 释放技能
        /// </summary>
        public override void ReleaseSkill()
        {
        }
        public override void Init()
        {
            base.Init();
            Debug.Log("--------------------- 魔法护盾技能初始化 ---------------------");
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillShieldWall.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 972f8036a93bb5e458806c734414125e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs
New file
@@ -0,0 +1,28 @@
using UnityEngine;
/**
 * 召唤木桩
 * @Author: chenxin
 * @Date: 2020-11-02 17:15:39
 */
namespace KTGMGemClient
{
    public class BossSkillWoodPile : EndlessBossSkill
    {
        public BossSkillWoodPile(boss_skill param) : base(param) { }
        /// <summary>
        /// 释放技能
        /// </summary>
        public override void ReleaseSkill()
        {
        }
        public override void Init()
        {
            base.Init();
            Debug.Log("--------------------- 召唤木桩技能初始化 ---------------------");
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 345a680f4c105a24a8938d705a2c5eba
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs
New file
@@ -0,0 +1,132 @@
using Core.Utilities;
/**
 * 无尽模式boss技能基类
 * @Author: chenxin
 * @Date: 2020-11-02 16:47:31
 */
namespace KTGMGemClient
{
    public abstract class EndlessBossSkill
    {
        public EndlessBossSkill(boss_skill param)
        {
            SkillData = param;
            SkillType = (EndlessBossSkillType)param.skill_class;
            SkillAI = GetSkillAI(param);
        }
        /// <summary>
        /// 技能类型
        /// </summary>
        public EndlessBossSkillType SkillType { get; set; }
        /// <summary>
        /// 技能配置表数据
        /// </summary>
        public boss_skill SkillData { get; protected set; }
        /// <summary>
        /// 技能AI
        /// </summary>
        public EndlessBossSkillAI SkillAI { get; protected set; }
        /// <summary>
        /// 冷却是否完成
        /// </summary>
        public bool IsCDCompleted { get; set; }
        /// <summary>
        /// 是否满足AI条件
        /// </summary>
        /// <value></value>
        public bool IsConditionOK { get; set; }
        /// <summary>
        /// 技能cd的计时器
        /// </summary>
        protected Timer cdTimer;
        /// <summary>
        /// 帧刷新
        /// </summary>
        public virtual void Update(float deltaTime)
        {
            SkillAI.Update(deltaTime);
            if (SkillAI.IsActived)
            {
                if (!IsCDCompleted && cdTimer.Tick(deltaTime))
                    IsCDCompleted = true;
                IsConditionOK = SkillAI.CanRelease();
            }
        }
        /// <summary>
        /// 后面根据类型来获得
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        private EndlessBossSkillAI GetSkillAI(boss_skill param)
        {
            return new NormalBossSkillAI(param);
        }
        /// <summary>
        /// 释放技能
        /// </summary>
        public virtual void ReleaseSkill()
        {
            IsCDCompleted = false;
            ResetCD();
        }
        /// <summary>
        /// 技能初始化
        /// </summary>
        public virtual void Init()
        {
            AddEvent();
            SkillAI.Init();
            // 技能第一次的cd直接就是好的
            cdTimer = new Timer(0);
        }
        /// <summary>
        /// 重置cd时间
        /// </summary>
        protected void ResetCD()
        {
            cdTimer.SetTime(SkillData.cool_down / 1000f);
            cdTimer.Reset();
        }
        public virtual void Reset()
        {
            cdTimer.SetTime(0);
            cdTimer.Reset();
            SkillAI.Reset();
        }
        /// <summary>
        /// 清理方法
        /// </summary>
        public virtual void Clear()
        {
            RemoveEvent();
            IsCDCompleted = false;
            cdTimer = null;
            SkillAI.Clear();
        }
        protected virtual void AddEvent()
        {
        }
        protected virtual void RemoveEvent()
        {
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 151d3ee3975ad6e4788937bdf8649eff
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs
New file
@@ -0,0 +1,183 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Core.Utilities;
/**
 * 无尽模式boss技能管理器
 * @Author: chenxin
 * @Date: 2020-11-02 16:46:12
 */
namespace KTGMGemClient
{
    public class EndlessBossSkillManager : Singleton<EndlessBossSkillManager>
    {
        /// <summary>
        /// boss技能id列表
        /// </summary>
        private List<int> skillIdList;
        /// <summary>
        /// 技能列表,所有的技能 cdList + waitList = skillList
        /// </summary>
        private List<EndlessBossSkill> skillList;
        /// <summary>
        /// 技能cd列表,技能冷却好了就放到这个队列
        /// </summary>
        private List<EndlessBossSkill> cdList;
        /// <summary>
        /// 正在等待冷却的技能队列
        /// </summary>
        private List<EndlessBossSkill> waitList;
        /// <summary>
        /// 是否终止使用技能
        /// </summary>
        /// <value></value>
        private bool isPaused { get; set; }
        // Start is called before the first frame update
        private void Start()
        {
            skillList = new List<EndlessBossSkill>();
            cdList = new List<EndlessBossSkill>();
            waitList = new List<EndlessBossSkill>();
        }
        // Update is called once per frame
        private void Update()
        {
            if (isPaused) return;
            for (int i = 0; i < skillList.Count; ++i)
            {
                skillList[i].Update(Time.deltaTime);
                if (skillList[i].IsCDCompleted)
                    AddSkill(skillList[i]);
            }
            for (int i = 0; i < cdList.Count; ++i)
            {
                if (cdList[i].IsConditionOK)
                {
                    cdList[i].ReleaseSkill();
                    RemoveSkill(cdList[i]);
                }
            }
        }
        /// <summary>
        /// 更新关卡需要重新初始化boss技能
        /// </summary>
        /// <param name="idList"></param>
        public void Init(List<int> idList)
        {
            Debug.Log("--------------------- 初始化boss技能列表 ---------------------");
            skillIdList = idList;
            for (int i = 0; i < idList.Count; ++i)
            {
                EndlessBossSkill skill = GetSkillInstanceByType(idList[i]);
                if (skill != null)
                {
                    skillList.Add(skill);
                    skill.Init();
                }
            }
            isPaused = false;
        }
        /// <summary>
        /// 关卡结束需要清理一下技能列表
        /// </summary>
        public void ClearSkillList()
        {
            Debug.Log("--------------------- 关卡结束,清空技能列表 ---------------------");
            for (int i = 0; i < skillList.Count; ++i)
            {
                skillList[i].Clear();
            }
            skillList.Clear();
            cdList.Clear();
            waitList.Clear();
            isPaused = true;
        }
        /// <summary>
        /// 波次更新时需要重置所有技能
        /// </summary>
        public void Reset()
        {
            for (int i = 0; i < skillList.Count; ++i)
            {
                skillList[i].Reset();
            }
            cdList.Clear();
            waitList.Clear();
            isPaused = true;
        }
        /// <summary>
        /// 重新开始新的一波,重新启动技能
        /// </summary>
        public void Restart()
        {
            isPaused = false;
        }
        /// <summary>
        /// 获取技能实例
        /// </summary>
        /// <param name="skillId">技能id</param>
        /// <returns></returns>
        private EndlessBossSkill GetSkillInstanceByType(int skillId)
        {
            boss_skill data = EndlessBossSkillData.GetDataById(skillId);
            if (data == null)
            {
                Debug.LogError($"--------------------- skillId: {skillId},没有对应的技能数据 ---------------------");
                return null;
            }
            switch ((EndlessBossSkillType)data.skill_class)
            {
                case EndlessBossSkillType.ShieldWall:
                    return new BossSkillShieldWall(data);
                case EndlessBossSkillType.BubbleBomb:
                    return new BossSkillBubbleBomb(data);
                case EndlessBossSkillType.WoodPile:
                    return new BossSkillWoodPile(data);
            }
            return null;
        }
        /// <summary>
        /// 技能cd好了,加到cd列表
        /// </summary>
        /// <param name="skill"></param>
        private void AddSkill(EndlessBossSkill skill)
        {
            waitList.Remove(skill);
            cdList.Add(skill);
        }
        /// <summary>
        /// 技能进入冷却状态,加到等待列表
        /// </summary>
        /// <param name="skill"></param>
        private void RemoveSkill(EndlessBossSkill skill)
        {
            cdList.Remove(skill);
            waitList.Add(skill);
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 178f167d46a275f46b252d07f0809e45
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1675d2ff3ee0e804a912af9988e28c1d
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs
New file
@@ -0,0 +1,86 @@
using Core.Utilities;
/**
 * 无尽模式boss技能AI基类
 * @Author: chenxin
 * @Date: 2020-11-02 20:23:32
 */
namespace KTGMGemClient
{
    public abstract class EndlessBossSkillAI
    {
        public EndlessBossSkillAI(boss_skill param)
        {
            SkillData = param;
            // cx test
            AIType = EndlessBossSkillAIType.Normal;
        }
        /// <summary>
        /// 技能AI类型
        /// </summary>
        /// <value></value>
        public EndlessBossSkillAIType AIType { get; protected set; }
        /// <summary>
        /// 技能配置表数据
        /// </summary>
        public boss_skill SkillData { get; protected set; }
        /// <summary>
        /// 技能是否被激活,只有被激活才会开始cd,也才能去释放,取决于具体的AI怎么去实现它
        /// </summary>
        /// <value></value>
        public bool IsActived { get; set; }
        protected Timer timer;
        /// <summary>
        /// 帧刷新
        /// </summary>
        /// <param name="deltaTime"></param>
        public virtual void Update(float deltaTime)
        {
        }
        protected virtual void AddEvent()
        {
            EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBeginWave, OnEndlessBeginWave);
        }
        protected virtual void RemoveEvent()
        {
            EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBeginWave, OnEndlessBeginWave);
        }
        protected virtual void OnEndlessBeginWave()
        {
        }
        /// <summary>
        /// AI 初始化
        /// </summary>
        public virtual void Init()
        {
            AddEvent();
        }
        public virtual void Clear()
        {
            RemoveEvent();
        }
        /// <summary>
        /// 重置AI
        /// </summary>
        public abstract void Reset();
        /// <summary>
        /// 是否满足条件可以释放技能
        /// </summary>
        /// <returns></returns>
        public abstract bool CanRelease();
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 316720dc863139d4eb739868bbff24f2
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs
New file
@@ -0,0 +1,65 @@
using UnityEngine;
using Core.Utilities;
/**
 * 普通boss技能AI
 * @Author: chenxin
 * @Date: 2020-11-02 20:58:49
 */
namespace KTGMGemClient
{
    public class NormalBossSkillAI : EndlessBossSkillAI
    {
        public NormalBossSkillAI(boss_skill param) : base(param) { }
        /// <summary>
        /// 每一波开始后30s可以释放技能
        /// </summary>
        public float SetupTime { get; set; } = 15f;
        public override void Update(float deltaTime)
        {
            base.Update(deltaTime);
            if (timer != null && timer.Tick(deltaTime))
            {
                IsActived = true;
                timer = null;
                Debug.Log("--------------------- 技能准备完成 ---------------------");
            }
        }
        public override bool CanRelease()
        {
            return IsActived;
        }
        protected override void OnEndlessBeginWave()
        {
            base.OnEndlessBeginWave();
            if (timer == null)
                timer = new Timer(SetupTime);
            else
                timer.SetTime(SetupTime);
        }
        public override void Reset()
        {
            IsActived = false;
            if (timer != null)
            {
                timer.SetTime(SetupTime);
                timer.Reset();
            }
        }
        public override void Clear()
        {
            base.Clear();
            IsActived = false;
            timer = null;
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 50f6a01d997fb9f4aa30c3771b6b2dc2
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/UI/EndlessSettlementPropList.cs
@@ -54,22 +54,22 @@
            // }
            return;
            List<EndlessDrop> list = EndlessDropManager.instance.GetAllObtainedDrop();
            // List<EndlessDrop> list = EndlessDropManager.instance.GetAllObtainedDrop();
            for (int i = 0; i < list.Count; ++i)
            {
                if (list[i].Reward.type == CURRENCY.Gold)
                {
                    AddItem($"{(int)list[i].Reward.type}");
                }
                else
                {
                    for (int j = 0; j < list[i].Reward.count; ++j)
                    {
                        AddItem($"{(int)list[i].Reward.type}_{list[i].Reward.id}");
                    }
                }
            }
            // for (int i = 0; i < list.Count; ++i)
            // {
            //     if (list[i].Reward.type == CURRENCY.Gold)
            //     {
            //         AddItem($"{(int)list[i].Reward.type}");
            //     }
            //     else
            //     {
            //         for (int j = 0; j < list[i].Reward.count; ++j)
            //         {
            //             AddItem($"{(int)list[i].Reward.type}_{list[i].Reward.id}");
            //         }
            //     }
            // }
        }
        private void StartLater()
Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs
@@ -111,25 +111,6 @@
        EventCenter.Ins.Add<Vector3>((int)KTGMGemClient.EventType.PlayAppearEffect, GuidePlayAppearEffect);
        EventCenter.Ins.Add<Vector3>((int)KTGMGemClient.EventType.GuidePlayUpgradeEffect, GuidePlayUpgradeEffect);
    }
    private void RemoveGuideEvent()
    {
        EventCenter.Ins.Remove((int)KTGMGemClient.EventType.CreateFireLv2, CreateFireLv2);
        EventCenter.Ins.Remove((int)KTGMGemClient.EventType.CreateFirstWave, CreateFirstWave);
        EventCenter.Ins.Remove((int)KTGMGemClient.EventType.RestartWave, RestartWave);
        EventCenter.Ins.Remove<int>((int)KTGMGemClient.EventType.AddGold, AddGold);
        EventCenter.Ins.Remove((int)KTGMGemClient.EventType.CreateWaterLv1, CreateWaterLv1);
        EventCenter.Ins.Remove((int)KTGMGemClient.EventType.CreateSecondWave, CreateSecondWave);
        EventCenter.Ins.Remove((int)KTGMGemClient.EventType.SkillRelease, SkillRelease);
        EventCenter.Ins.Remove((int)KTGMGemClient.EventType.GuideFinish, NewbieGuideEnd);
    }
    protected override void OnDestroy()
    {
        base.OnDestroy();
        RemoveGuideEvent();
    }
    /// <summary>
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -1361,8 +1361,6 @@
            }
        }
        /// <summary>
        /// 播放宝石出现特效
        /// </summary>
Assets/StreamingAssets/Table/boss_skill.json
@@ -1 +1 @@
[[10001,"魔法护盾",10001,20000,[2,1],1,10001,[0.3,0]],[10002,"泡泡炸弹",10002,20000,[3,1],2,10002,[10,5]],[10003,"召唤木桩",10003,20000,[3,1],3,10003,[3,2.5]]]
[[10001,"魔法护盾",10001,20000,[2,1],[1],10001,1,[0.3,0]],[10002,"泡泡炸弹",10002,15000,[3,1],[2],10001,2,[15,3]],[10003,"召唤木桩",10003,20000,[3,1],[3],10001,3,[3,2.5]]]
Assets/StreamingAssets/Table/endless_boss.json
@@ -1 +1 @@
[[1,"史莱姆大王",1,1,[10001]],[2,"捣蛋恶魔",1,2,[10002,10003]],[3,"精灵小偷",1,3,[10001,10002]]]
[[1,"史莱姆大王",1,1,[10002]],[2,"捣蛋恶魔",1,2,[10002,10003]],[3,"精灵小偷",1,3,[10001,10002]]]
Assets/StreamingAssets/Table/endless_buff.json
@@ -1 +1 @@
[[1,"低级火灵之力",[2,1],[1,2,0],-1,"增加全体火精灵2%攻击力",0,99,10001,1],[2,"低级水灵之力",[2,2],[1,2,0],-1,"增加全体水精灵2%攻击力",0,99,10002,1],[3,"低级木灵之力",[2,3],[1,2,0],-1,"增加全体木精灵2%攻击力",0,99,10003,1],[4,"火灵之力",[2,1],[1,4,0],-1,"增加全体火精灵4%攻击力",0,99,10001,2],[5,"水灵之力",[2,2],[1,4,0],-1,"增加全体水精灵4%攻击力",0,99,10002,2],[6,"木灵之力",[2,3],[1,4,0],-1,"增加全体木精灵4%攻击力",0,99,10003,2],[7,"高级火灵之力",[2,1],[1,6,0],-1,"增加全体火精灵6%攻击力",0,99,10001,3],[8,"高级水灵之力",[2,2],[1,6,0],-1,"增加全体水精灵6%攻击力",0,99,10002,3],[9,"高级木灵之力",[2,3],[1,6,0],-1,"增加全体木精灵6%攻击力",0,99,10003,3],[10,"精灵之力",[1,0],[1,10,0],3,"3波增加全体精灵10%攻击力",0,99,10004,2],[11,"时空宝石",[1,0],[1,20,0],3,"3波内增加全体精灵20%攻击力",0,99,10005,3],[12,"飞来横财",[0],[2,500,0],0,"增加500金币",0,99,10007,1],[13,"中大奖!",[0],[2,1000,0],0,"增加1000金币",0,99,10007,3],[14,"精灵魔盒",[0],[3,3,300],0,"随机获得一个3级精灵",0,99,10006,2],[15,"超级精灵魔盒",[0],[3,4,500],0,"随机获得一个4级精灵",0,99,10006,3]]
[[1,"低级火灵之力",[2,1],[1,2,0],-1,"增加全体火精灵2%攻击力",0,99,10001,1],[2,"低级水灵之力",[2,2],[1,2,0],-1,"增加全体水精灵2%攻击力",0,99,10002,1],[3,"低级木灵之力",[2,3],[1,2,0],-1,"增加全体木精灵2%攻击力",0,99,10003,1],[4,"火灵之力",[2,1],[1,4,0],-1,"增加全体火精灵4%攻击力",3,99,10001,2],[5,"水灵之力",[2,2],[1,4,0],-1,"增加全体水精灵4%攻击力",3,99,10002,2],[6,"木灵之力",[2,3],[1,4,0],-1,"增加全体木精灵4%攻击力",3,99,10003,2],[7,"高级火灵之力",[2,1],[1,6,0],-1,"增加全体火精灵6%攻击力",5,99,10001,3],[8,"高级水灵之力",[2,2],[1,6,0],-1,"增加全体水精灵6%攻击力",5,99,10002,3],[9,"高级木灵之力",[2,3],[1,6,0],-1,"增加全体木精灵6%攻击力",5,99,10003,3],[10,"精灵之力",[1,0],[1,10,0],3,"3波增加全体精灵10%攻击力",2,99,10004,2],[11,"时空宝石",[1,0],[1,20,0],3,"3波内增加全体精灵20%攻击力",2,99,10005,3],[12,"飞来横财",[0],[2,300,0],0,"增加300金币",0,99,10007,1],[13,"中大奖!",[0],[2,800,0],0,"增加800金币",3,99,10007,3],[14,"精灵魔盒",[0],[3,3,300],0,"随机获得一个3级精灵",0,99,10006,2],[15,"超级精灵魔盒",[0],[3,4,500],0,"随机获得一个4级精灵",3,99,10006,3]]
Assets/StreamingAssets/Table/endless_enemy.json
@@ -1 +1 @@
[[1,"测试小怪1",1,1,2.2,1,101],[2,"测试小怪2",1,4,1,3,102],[3,"测试小怪3",1,1.5,1.2,1,103],[4,"测试小怪4",1,4,2,1,104],[5,"测试小怪5",2,5,2,1,105],[6,"测试小怪6",2,6,2,1,106]]
[[1,"小怪_火",1,1,2.2,1,101],[2,"小怪_水",1,4,1,3,102],[3,"小怪_木",1,1.5,1.2,1,103]]
Assets/StreamingAssets/Table/endless_port.json
@@ -1 +1 @@
[[1,-2,"史莱姆大王",1,1,1,0,0,0,400,1.5,5,3000,["0"],[0],0],[2,-2,"史莱姆大王",1,1,2,0,0,0,400,1.5,5,3000,["0"],[0],0],[3,-2,"史莱姆大王",1,1,3,3,10,2000,400,1.5,5,3000,["0"],[0],3],[4,-2,"史莱姆大王",1,1,4,0,0,0,400,1.5,5,3000,["0"],[0],0],[5,-2,"史莱姆大王",1,1,5,0,0,0,400,1.5,5,3000,["0"],[0],0],[6,-1,"史莱姆大王",1,2,1,0,0,0,800,1.5,5,3000,["0"],[0],0],[7,-1,"史莱姆大王",1,2,2,1,10,2000,800,1.5,5,3000,["0"],[0],1],[8,-1,"史莱姆大王",1,2,3,0,0,0,800,1.5,5,3000,["0"],[0],0],[9,-1,"史莱姆大王",1,2,4,0,0,0,800,1.5,5,3000,["0"],[0],0],[10,-1,"史莱姆大王",1,2,5,0,0,0,800,1.5,5,3000,["0"],[0],0],[11,1,"史莱姆大王",2,1,1,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[12,1,"史莱姆大王",2,1,2,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[13,1,"史莱姆大王",2,1,3,2,"4","6000",400,1.5,5,3000,["gold:1"],[500,9500],2],[14,1,"史莱姆大王",2,1,4,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[15,1,"史莱姆大王",2,1,5,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[16,1,"史莱姆大王",2,2,1,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[17,1,"史莱姆大王",2,2,2,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[18,1,"史莱姆大王",2,2,3,3,"6","4000",400,1.5,5,3000,["gold:1"],[500,9500],3],[19,1,"史莱姆大王",2,2,4,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[20,1,"史莱姆大王",2,2,5,0,"0","0",400,1.5,5,3000,["box:1:1"],[500,9500],0],[21,1,"拿破仑",1,1,1,0,"0","0",520,1.5,5,3000,["gold:1"],[500,9500],0],[22,2,"拿破仑",1,1,2,2,"4","6000",555,1.5,5,3000,["gold:1"],[500,9500],2],[23,2,"拿破仑",1,1,3,0,"0","0",590,1.5,5,3000,["gold:1"],[500,9500],0],[24,2,"拿破仑",1,1,4,2,"4","6000",625,1.5,5,3000,["gold:1"],[500,9500],2],[25,2,"拿破仑",1,1,5,0,"0","0",660,1.5,5,3000,["gold:1"],[500,9500],0],[26,2,"拿破仑",1,2,1,0,"0","0",695,1.5,5,3000,["gold:1"],[500,9500],0],[27,2,"拿破仑",1,2,2,3,"6","4000",730,1.5,5,3000,["gold:1"],[500,9500],3],[28,2,"拿破仑",1,2,3,1,"12","2000",765,1.5,5,3000,["gold:1"],[500,9500],1],[29,2,"拿破仑",1,2,4,3,"6","4000",800,1.5,5,3000,["gold:1"],[500,9500],3],[30,2,"拿破仑",1,2,5,0,"0","0",835,1.5,5,3000,["box:1:1"],[500,9500],0],[31,3,"凯撒",2,1,1,3,"6","4000",870,1.5,5,3000,["gold:1"],[500,9500],3],[32,3,"凯撒",2,1,2,0,"0","0",905,1.5,5,3000,["gold:1"],[500,9500],0],[33,3,"凯撒",2,1,3,1,"12","2000",940,1.5,5,3000,["gold:1"],[500,9500],1],[34,3,"凯撒",2,1,4,0,"0","0",975,1.5,5,3000,["gold:1"],[500,9500],0],[35,3,"凯撒",2,1,5,3,"6","4000",1010,1.5,5,3000,["gold:1"],[500,9500],3],[36,3,"凯撒",2,2,1,0,"0","0",1045,1.5,5,3000,["gold:1"],[500,9500],0],[37,3,"凯撒",2,2,2,2,"4","6000",1080,1.5,5,3000,["gold:1"],[500,9500],2],[38,3,"凯撒",2,2,3,3,"6","4000",1115,1.5,5,3000,["gold:1"],[500,9500],3],[39,3,"凯撒",2,2,4,2,"4","6000",1150,1.5,5,3000,["gold:1"],[500,9500],2],[40,3,"凯撒",2,2,5,0,"0","0",1185,1.5,5,3000,["gold:1"],[500,9500],0],[41,3,"凯撒",2,3,1,3,"6","4000",1220,1.5,5,3000,["box:2:1"],[500,9500],3],[42,3,"凯撒",2,3,2,2,"4","6000",1255,1.5,5,3000,["box:2:1"],[500,9500],2],[43,3,"凯撒",2,3,3,1,"12","2000",1290,1.5,5,3000,["box:2:1"],[500,9500],1],[44,3,"凯撒",2,3,4,2,"4","6000",1325,1.5,5,3000,["box:2:1"],[500,9500],2],[45,3,"凯撒",2,3,5,3,"6","4000",1360,1.5,5,3000,["box:2:1"],[500,9500],3],[46,4,"克伦威尔",1,1,1,3,"6","4000",1395,1.5,5,3000,["gold:1"],[500,9500],3],[47,4,"克伦威尔",1,1,2,1,"12","2000",1430,1.5,5,3000,["gold:1"],[500,9500],1],[48,4,"克伦威尔",1,1,3,0,"0","0",1465,1.5,5,3000,["gold:1"],[500,9500],0],[49,4,"克伦威尔",1,1,4,1,"12","2000",1500,1.5,5,3000,["gold:1"],[500,9500],1],[50,4,"克伦威尔",1,1,5,3,"6","4000",1535,1.5,5,3000,["gold:1"],[500,9500],3],[51,4,"克伦威尔",1,2,1,2,"4","6000",1570,1.5,5,3000,["gold:1"],[500,9500],2],[52,4,"克伦威尔",1,2,2,1,"12","2000",1605,1.5,5,3000,["gold:1"],[500,9500],1],[53,4,"克伦威尔",1,2,3,0,"0","0",1640,1.5,5,3000,["gold:1"],[500,9500],0],[54,4,"克伦威尔",1,2,4,1,"12","2000",1675,1.5,5,3000,["gold:1"],[500,9500],1],[55,4,"克伦威尔",1,2,5,2,"4","6000",1710,1.5,5,3000,["gold:1"],[500,9500],2],[56,4,"克伦威尔",1,3,1,3,"6","4000",1745,1.5,5,3000,["box:2:1"],[500,9500],3],[57,4,"克伦威尔",1,3,2,3,"6","4000",1780,1.5,5,3000,["box:2:1"],[500,9500],3],[58,4,"克伦威尔",1,3,3,1,"12","2000",1815,1.5,5,3000,["box:2:1"],[500,9500],1],[59,4,"克伦威尔",1,3,4,2,"4","6000",1850,1.5,5,3000,["box:2:1"],[500,9500],2],[60,4,"克伦威尔",1,3,5,2,"4","6000",1885,1.5,5,3000,["box:2:1"],[500,9500],2],[61,5,"尼克松",2,1,1,1,"12","2000",1920,1.5,5,3000,["gold:1"],[500,9500],1],[62,5,"尼克松",2,1,2,1,"12","2000",1955,1.5,5,3000,["gold:1"],[500,9500],1],[63,5,"尼克松",2,1,3,1,"12","2000",1990,1.5,5,3000,["gold:1"],[500,9500],1],[64,5,"尼克松",2,1,4,1,"12","2000",2025,1.5,5,3000,["gold:1"],[500,9500],1],[65,5,"尼克松",2,1,5,1,"12","2000",2060,1.5,5,3000,["gold:1"],[500,9500],1],[66,5,"尼克松",2,2,1,2,"4","6000",2095,1.5,5,3000,["gold:1"],[500,9500],2],[67,5,"尼克松",2,2,2,2,"4","6000",2130,1.5,5,3000,["gold:1"],[500,9500],2],[68,5,"尼克松",2,2,3,2,"4","6000",2165,1.5,5,3000,["gold:1"],[500,9500],2],[69,5,"尼克松",2,2,4,2,"4","6000",2200,1.5,5,3000,["gold:1"],[500,9500],2],[70,5,"尼克松",2,2,5,2,"4","6000",2235,1.5,5,3000,["gold:1"],[500,9500],2],[71,5,"尼克松",2,3,1,3,"6","4000",2270,1.5,5,3000,["gold:1"],[500,9500],3],[72,5,"尼克松",2,3,2,3,"6","4000",2305,1.5,5,3000,["gold:1"],[500,9500],3],[73,5,"尼克松",2,3,3,3,"6","4000",2340,1.5,5,3000,["gold:1"],[500,9500],3],[74,5,"尼克松",2,3,4,3,"6","4000",2375,1.5,5,3000,["gold:1"],[500,9500],3],[75,5,"尼克松",2,3,5,3,"6","4000",2410,1.5,5,3000,["gold:1"],[500,9500],3],[76,5,"尼克松",2,4,1,-1,"8","3000",2445,1.5,5,3000,["box:2:1"],[500,9500],4],[77,5,"尼克松",2,4,2,-1,"8","3000",2480,1.5,5,3000,["box:2:1"],[500,9500],4],[78,5,"尼克松",2,4,3,-1,"8","3000",2515,1.5,5,3000,["box:2:1"],[500,9500],4],[79,5,"尼克松",2,4,4,-1,"8","3000",2550,1.5,5,3000,["box:2:1"],[500,9500],4],[80,5,"尼克松",2,4,5,-1,"8","3000",2585,1.5,5,3000,["box:2:1"],[500,9500],4],[81,6,"李存勖",1,1,1,1,"12","2000",2620,1.5,5,3000,["gold:1"],[500,9500],1],[82,6,"李存勖",1,1,2,1,"12","2000",2655,1.5,5,3000,["gold:1"],[500,9500],1],[83,6,"李存勖",1,1,3,2,"4","6000",2690,1.5,5,3000,["gold:1"],[500,9500],2],[84,6,"李存勖",1,1,4,1,"12","2000",2725,1.5,5,3000,["gold:1"],[500,9500],1],[85,6,"李存勖",1,1,5,1,"12","2000",2760,1.5,5,3000,["gold:1"],[500,9500],1],[86,6,"李存勖",1,2,1,2,"4","6000",2795,1.5,5,3000,["gold:1"],[500,9500],2],[87,6,"李存勖",1,2,2,2,"4","6000",2830,1.5,5,3000,["gold:1"],[500,9500],2],[88,6,"李存勖",1,2,3,3,"6","4000",2865,1.5,5,3000,["gold:1"],[500,9500],3],[89,6,"李存勖",1,2,4,2,"4","6000",2900,1.5,5,3000,["gold:1"],[500,9500],2],[90,6,"李存勖",1,2,5,2,"4","6000",2935,1.5,5,3000,["gold:1"],[500,9500],2],[91,6,"李存勖",1,3,1,1,"12","2000",2970,1.5,5,3000,["gold:1"],[500,9500],1],[92,6,"李存勖",1,3,2,2,"4","6000",3005,1.5,5,3000,["gold:1"],[500,9500],2],[93,6,"李存勖",1,3,3,3,"6","4000",3040,1.5,5,3000,["gold:1"],[500,9500],3],[94,6,"李存勖",1,3,4,2,"4","6000",3075,1.5,5,3000,["gold:1"],[500,9500],2],[95,6,"李存勖",1,3,5,1,"12","2000",3110,1.5,5,3000,["gold:1"],[500,9500],1],[96,6,"李存勖",1,4,1,2,"4","6000",3145,1.5,5,3000,["box:3:1"],[500,9500],2],[97,6,"李存勖",1,4,2,1,"12","2000",3180,1.5,5,3000,["box:3:1"],[500,9500],1],[98,6,"李存勖",1,4,3,-1,"8","3000",3215,1.5,5,3000,["box:3:1"],[500,9500],4],[99,6,"李存勖",1,4,4,1,"12","2000",3250,1.5,5,3000,["box:3:1"],[500,9500],1],[100,6,"李存勖",1,4,5,2,"4","6000",3285,1.5,5,3000,["box:3:1"],[500,9500],2],[101,7,"AA_12",1,1,1,3,"6","4000",3320,1.5,5,3000,["gold:1"],[500,9500],3],[102,7,"AA_12",1,1,2,3,"6","4000",3355,1.5,5,3000,["gold:1"],[500,9500],3],[103,7,"AA_12",1,1,3,1,"12","2000",3390,1.5,5,3000,["gold:1"],[500,9500],1],[104,7,"AA_12",1,1,4,3,"6","4000",3425,1.5,5,3000,["gold:1"],[500,9500],3],[105,7,"AA_12",1,1,5,3,"6","4000",3460,1.5,5,3000,["gold:1"],[500,9500],3],[106,7,"AA_12",1,2,1,1,"12","2000",3495,1.5,5,3000,["gold:1"],[500,9500],1],[107,7,"AA_12",1,2,2,2,"4","6000",3530,1.5,5,3000,["gold:1"],[500,9500],2],[108,7,"AA_12",1,2,3,3,"6","4000",3565,1.5,5,3000,["gold:1"],[500,9500],3],[109,7,"AA_12",1,2,4,2,"4","6000",3600,1.5,5,3000,["gold:1"],[500,9500],2],[110,7,"AA_12",1,2,5,1,"12","2000",3635,1.5,5,3000,["gold:1"],[500,9500],1],[111,7,"AA_12",1,3,1,2,"4","6000",3670,1.5,5,3000,["gold:1"],[500,9500],2],[112,7,"AA_12",1,3,2,1,"12","2000",3705,1.5,5,3000,["gold:1"],[500,9500],1],[113,7,"AA_12",1,3,3,3,"6","4000",3740,1.5,5,3000,["gold:1"],[500,9500],3],[114,7,"AA_12",1,3,4,1,"12","2000",3775,1.5,5,3000,["gold:1"],[500,9500],1],[115,7,"AA_12",1,3,5,2,"4","6000",3810,1.5,5,3000,["gold:1"],[500,9500],2],[116,7,"AA_12",1,4,1,2,"4","6000",3845,1.5,5,3000,["box:3:1"],[500,9500],2],[117,7,"AA_12",1,4,2,2,"4","6000",3880,1.5,5,3000,["box:3:1"],[500,9500],2],[118,7,"AA_12",1,4,3,-1,"8","3000",3915,1.5,5,3000,["box:3:1"],[500,9500],4],[119,7,"AA_12",1,4,4,3,"6","4000",3950,1.5,5,3000,["box:3:1"],[500,9500],3],[120,7,"AA_12",1,4,5,3,"6","4000",3985,1.5,5,3000,["box:3:1"],[500,9500],3],[121,8,"米高扬",2,1,1,1,"6","4000",4020,1.5,5,3000,["gold:1"],[500,9500],1],[122,8,"米高扬",2,1,2,1,"6","4000",4055,1.5,5,3000,["gold:1"],[500,9500],1],[123,8,"米高扬",2,1,3,1,"12","2000",4090,1.5,5,3000,["gold:1"],[500,9500],1],[124,8,"米高扬",2,1,4,1,"6","4000",4125,1.5,5,3000,["gold:1"],[500,9500],1],[125,8,"米高扬",2,1,5,1,"6","4000",4160,1.5,5,3000,["gold:1"],[500,9500],1],[126,8,"米高扬",2,2,1,2,"12","2000",4195,1.5,5,3000,["gold:1"],[500,9500],2],[127,8,"米高扬",2,2,2,2,"4","6000",4230,1.5,5,3000,["gold:1"],[500,9500],2],[128,8,"米高扬",2,2,3,2,"6","4000",4265,1.5,5,3000,["gold:1"],[500,9500],2],[129,8,"米高扬",2,2,4,2,"4","6000",4300,1.5,5,3000,["gold:1"],[500,9500],2],[130,8,"米高扬",2,2,5,2,"12","2000",4335,1.5,5,3000,["gold:1"],[500,9500],2],[131,8,"米高扬",2,3,1,3,"4","6000",4370,1.5,5,3000,["gold:1"],[500,9500],3],[132,8,"米高扬",2,3,2,3,"12","2000",4405,1.5,5,3000,["gold:1"],[500,9500],3],[133,8,"米高扬",2,3,3,3,"6","4000",4440,1.5,5,3000,["gold:1"],[500,9500],3],[134,8,"米高扬",2,3,4,3,"12","2000",4475,1.5,5,3000,["gold:1"],[500,9500],3],[135,8,"米高扬",2,3,5,3,"4","6000",4510,1.5,5,3000,["gold:1"],[500,9500],3],[136,8,"米高扬",2,4,1,-1,"4","6000",4545,1.5,5,3000,["box:3:1"],[500,9500],4],[137,8,"米高扬",2,4,2,-1,"4","6000",4580,1.5,5,3000,["box:3:1"],[500,9500],4],[138,8,"米高扬",2,4,3,-1,"8","3000",4615,1.5,5,3000,["box:3:1"],[500,9500],4],[139,8,"米高扬",2,4,4,-1,"6","4000",4650,1.5,5,3000,["box:3:1"],[500,9500],4],[140,8,"米高扬",2,4,5,-1,"6","4000",4685,1.5,5,3000,["box:3:1"],[500,9500],4],[141,9,"安德罗波夫",1,1,1,2,"6","4000",4720,1.5,5,3000,["gold:1"],[500,9500],2],[142,9,"安德罗波夫",1,1,2,2,"6","4000",4755,1.5,5,3000,["gold:1"],[500,9500],2],[143,9,"安德罗波夫",1,1,3,1,"12","2000",4790,1.5,5,3000,["gold:1"],[500,9500],1],[144,9,"安德罗波夫",1,1,4,2,"6","4000",4825,1.5,5,3000,["gold:1"],[500,9500],2],[145,9,"安德罗波夫",1,1,5,2,"6","4000",4860,1.5,5,3000,["gold:1"],[500,9500],2],[146,9,"安德罗波夫",1,2,1,3,"12","2000",4895,1.5,5,3000,["gold:1"],[500,9500],3],[147,9,"安德罗波夫",1,2,2,3,"4","6000",4930,1.5,5,3000,["gold:1"],[500,9500],3],[148,9,"安德罗波夫",1,2,3,2,"6","4000",4965,1.5,5,3000,["gold:1"],[500,9500],2],[149,9,"安德罗波夫",1,2,4,3,"4","6000",5000,1.5,5,3000,["gold:1"],[500,9500],3],[150,9,"安德罗波夫",1,2,5,3,"12","2000",5035,1.5,5,3000,["gold:1"],[500,9500],3],[151,9,"安德罗波夫",1,3,1,1,"4","6000",5070,1.5,5,3000,["gold:1"],[500,9500],1],[152,9,"安德罗波夫",1,3,2,1,"12","2000",5105,1.5,5,3000,["gold:1"],[500,9500],1],[153,9,"安德罗波夫",1,3,3,1,"6","4000",5140,1.5,5,3000,["gold:1"],[500,9500],1],[154,9,"安德罗波夫",1,3,4,1,"12","2000",5175,1.5,5,3000,["gold:1"],[500,9500],1],[155,9,"安德罗波夫",1,3,5,1,"4","6000",5210,1.5,5,3000,["gold:1"],[500,9500],1],[156,9,"安德罗波夫",1,4,1,2,"4","6000",5245,1.5,5,3000,["box:3:1"],[500,9500],2],[157,9,"安德罗波夫",1,4,2,-1,"4","6000",5280,1.5,5,3000,["box:3:1"],[500,9500],4],[158,9,"安德罗波夫",1,4,3,-1,"8","3000",5315,1.5,5,3000,["box:3:1"],[500,9500],4],[159,9,"安德罗波夫",1,4,4,-1,"6","4000",5350,1.5,5,3000,["box:3:1"],[500,9500],4],[160,9,"安德罗波夫",1,4,5,2,"6","4000",5385,1.5,5,3000,["box:3:1"],[500,9500],2]]
[[1,-2,"史莱姆大王",1,1,1,0,0,0,400,1.5,5,3000,["0"],[0],0],[2,-2,"史莱姆大王",1,1,2,0,0,0,400,1.5,5,3000,["0"],[0],0],[3,-2,"史莱姆大王",1,1,3,3,10,2000,400,1.5,5,3000,["0"],[0],3],[4,-2,"史莱姆大王",1,1,4,0,0,0,400,1.5,5,3000,["0"],[0],0],[5,-2,"史莱姆大王",1,1,5,0,0,0,400,1.5,5,3000,["0"],[0],0],[6,-1,"史莱姆大王",1,2,1,0,0,0,800,1.5,5,3000,["0"],[0],0],[7,-1,"史莱姆大王",1,2,2,1,10,2000,800,1.5,5,3000,["0"],[0],1],[8,-1,"史莱姆大王",1,2,3,0,0,0,800,1.5,5,3000,["0"],[0],0],[9,-1,"史莱姆大王",1,2,4,0,0,0,800,1.5,5,3000,["0"],[0],0],[10,-1,"史莱姆大王",1,2,5,0,0,0,800,1.5,5,3000,["0"],[0],0],[11,1,"史莱姆大王",2,1,1,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[12,1,"史莱姆大王",2,1,2,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[13,1,"史莱姆大王",2,1,3,2,"4","6000",400,1.5,5,3000,["gold:1"],[500,9500],2],[14,1,"史莱姆大王",2,1,4,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[15,1,"史莱姆大王",2,1,5,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[16,1,"史莱姆大王",2,2,1,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[17,1,"史莱姆大王",2,2,2,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[18,1,"史莱姆大王",2,2,3,3,"6","4000",400,1.5,5,3000,["gold:1"],[500,9500],3],[19,1,"史莱姆大王",2,2,4,0,"0","0",400,1.5,5,3000,["gold:1"],[500,9500],0],[20,1,"史莱姆大王",2,2,5,0,"0","0",400,1.5,5,3000,["box:1:1"],[500,9500],0],[21,1,"拿破仑",1,1,1,0,"0","0",520,1.5,5,3000,["gold:1"],[500,9500],0],[22,2,"拿破仑",1,1,2,2,"4","6000",555,1.5,5,3000,["gold:1"],[500,9500],2],[23,2,"拿破仑",1,1,3,0,"0","0",590,1.5,5,3000,["gold:1"],[500,9500],0],[24,2,"拿破仑",1,1,4,2,"4","6000",625,1.5,5,3000,["gold:1"],[500,9500],2],[25,2,"拿破仑",1,1,5,0,"0","0",660,1.5,5,3000,["gold:1"],[500,9500],0],[26,2,"拿破仑",1,2,1,0,"0","0",695,1.5,5,3000,["gold:1"],[500,9500],0],[27,2,"拿破仑",1,2,2,3,"6","4000",730,1.5,5,3000,["gold:1"],[500,9500],3],[28,2,"拿破仑",1,2,3,1,"12","2000",765,1.5,5,3000,["gold:1"],[500,9500],1],[29,2,"拿破仑",1,2,4,3,"6","4000",800,1.5,5,3000,["gold:1"],[500,9500],3],[30,2,"拿破仑",1,2,5,0,"0","0",835,1.5,5,3000,["box:1:1"],[500,9500],0],[31,3,"凯撒",2,1,1,3,"6","4000",870,1.5,5,3000,["gold:1"],[500,9500],3],[32,3,"凯撒",2,1,2,0,"0","0",905,1.5,5,3000,["gold:1"],[500,9500],0],[33,3,"凯撒",2,1,3,1,"12","2000",940,1.5,5,3000,["gold:1"],[500,9500],1],[34,3,"凯撒",2,1,4,0,"0","0",975,1.5,5,3000,["gold:1"],[500,9500],0],[35,3,"凯撒",2,1,5,3,"6","4000",1010,1.5,5,3000,["gold:1"],[500,9500],3],[36,3,"凯撒",2,2,1,0,"0","0",1045,1.5,5,3000,["gold:1"],[500,9500],0],[37,3,"凯撒",2,2,2,2,"4","6000",1080,1.5,5,3000,["gold:1"],[500,9500],2],[38,3,"凯撒",2,2,3,3,"6","4000",1115,1.5,5,3000,["gold:1"],[500,9500],3],[39,3,"凯撒",2,2,4,2,"4","6000",1150,1.5,5,3000,["gold:1"],[500,9500],2],[40,3,"凯撒",2,2,5,0,"0","0",1185,1.5,5,3000,["gold:1"],[500,9500],0],[41,3,"凯撒",2,3,1,3,"6","4000",1220,1.5,5,3000,["box:2:1"],[500,9500],3],[42,3,"凯撒",2,3,2,2,"4","6000",1255,1.5,5,3000,["box:2:1"],[500,9500],2],[43,3,"凯撒",2,3,3,1,"12","2000",1290,1.5,5,3000,["box:2:1"],[500,9500],1],[44,3,"凯撒",2,3,4,2,"4","6000",1325,1.5,5,3000,["box:2:1"],[500,9500],2],[45,3,"凯撒",2,3,5,3,"6","4000",1360,1.5,5,3000,["box:2:1"],[500,9500],3],[46,4,"克伦威尔",1,1,1,3,"6","4000",1395,1.5,5,3000,["gold:1"],[500,9500],3],[47,4,"克伦威尔",1,1,2,1,12,"2000",1430,1.5,5,3000,["gold:1"],[500,9500],1],[48,4,"克伦威尔",1,1,3,0,"0","0",1465,1.5,5,3000,["gold:1"],[500,9500],0],[49,4,"克伦威尔",1,1,4,1,"12","2000",1500,1.5,5,3000,["gold:1"],[500,9500],1],[50,4,"克伦威尔",1,1,5,3,"6","4000",1535,1.5,5,3000,["gold:1"],[500,9500],3],[51,4,"克伦威尔",1,2,1,2,"4","6000",1570,1.5,5,3000,["gold:1"],[500,9500],2],[52,4,"克伦威尔",1,2,2,1,"12","2000",1605,1.5,5,3000,["gold:1"],[500,9500],1],[53,4,"克伦威尔",1,2,3,0,"0","0",1640,1.5,5,3000,["gold:1"],[500,9500],0],[54,4,"克伦威尔",1,2,4,1,"12","2000",1675,1.5,5,3000,["gold:1"],[500,9500],1],[55,4,"克伦威尔",1,2,5,2,"4","6000",1710,1.5,5,3000,["gold:1"],[500,9500],2],[56,4,"克伦威尔",1,3,1,3,"6","4000",1745,1.5,5,3000,["box:2:1"],[500,9500],3],[57,4,"克伦威尔",1,3,2,3,"6","4000",1780,1.5,5,3000,["box:2:1"],[500,9500],3],[58,4,"克伦威尔",1,3,3,1,"12","2000",1815,1.5,5,3000,["box:2:1"],[500,9500],1],[59,4,"克伦威尔",1,3,4,2,"4","6000",1850,1.5,5,3000,["box:2:1"],[500,9500],2],[60,4,"克伦威尔",1,3,5,2,"4","6000",1885,1.5,5,3000,["box:2:1"],[500,9500],2],[61,5,"尼克松",2,1,1,1,"12","2000",1920,1.5,5,3000,["gold:1"],[500,9500],1],[62,5,"尼克松",2,1,2,1,"12","2000",1955,1.5,5,3000,["gold:1"],[500,9500],1],[63,5,"尼克松",2,1,3,1,"12","2000",1990,1.5,5,3000,["gold:1"],[500,9500],1],[64,5,"尼克松",2,1,4,1,"12","2000",2025,1.5,5,3000,["gold:1"],[500,9500],1],[65,5,"尼克松",2,1,5,1,"12","2000",2060,1.5,5,3000,["gold:1"],[500,9500],1],[66,5,"尼克松",2,2,1,2,"4","6000",2095,1.5,5,3000,["gold:1"],[500,9500],2],[67,5,"尼克松",2,2,2,2,"4","6000",2130,1.5,5,3000,["gold:1"],[500,9500],2],[68,5,"尼克松",2,2,3,2,"4","6000",2165,1.5,5,3000,["gold:1"],[500,9500],2],[69,5,"尼克松",2,2,4,2,"4","6000",2200,1.5,5,3000,["gold:1"],[500,9500],2],[70,5,"尼克松",2,2,5,2,"4","6000",2235,1.5,5,3000,["gold:1"],[500,9500],2],[71,5,"尼克松",2,3,1,3,"6","4000",2270,1.5,5,3000,["gold:1"],[500,9500],3],[72,5,"尼克松",2,3,2,3,"6","4000",2305,1.5,5,3000,["gold:1"],[500,9500],3],[73,5,"尼克松",2,3,3,3,"6","4000",2340,1.5,5,3000,["gold:1"],[500,9500],3],[74,5,"尼克松",2,3,4,3,"6","4000",2375,1.5,5,3000,["gold:1"],[500,9500],3],[75,5,"尼克松",2,3,5,3,"6","4000",2410,1.5,5,3000,["gold:1"],[500,9500],3],[76,5,"尼克松",2,4,1,-1,"8","3000",2445,1.5,5,3000,["box:2:1"],[500,9500],4],[77,5,"尼克松",2,4,2,-1,"8","3000",2480,1.5,5,3000,["box:2:1"],[500,9500],4],[78,5,"尼克松",2,4,3,-1,"8","3000",2515,1.5,5,3000,["box:2:1"],[500,9500],4],[79,5,"尼克松",2,4,4,-1,"8","3000",2550,1.5,5,3000,["box:2:1"],[500,9500],4],[80,5,"尼克松",2,4,5,-1,"8","3000",2585,1.5,5,3000,["box:2:1"],[500,9500],4],[81,6,"李存勖",1,1,1,1,"12","2000",2620,1.5,5,3000,["gold:1"],[500,9500],1],[82,6,"李存勖",1,1,2,1,"12","2000",2655,1.5,5,3000,["gold:1"],[500,9500],1],[83,6,"李存勖",1,1,3,2,"4","6000",2690,1.5,5,3000,["gold:1"],[500,9500],2],[84,6,"李存勖",1,1,4,1,"12","2000",2725,1.5,5,3000,["gold:1"],[500,9500],1],[85,6,"李存勖",1,1,5,1,"12","2000",2760,1.5,5,3000,["gold:1"],[500,9500],1],[86,6,"李存勖",1,2,1,2,"4","6000",2795,1.5,5,3000,["gold:1"],[500,9500],2],[87,6,"李存勖",1,2,2,2,"4","6000",2830,1.5,5,3000,["gold:1"],[500,9500],2],[88,6,"李存勖",1,2,3,3,"6","4000",2865,1.5,5,3000,["gold:1"],[500,9500],3],[89,6,"李存勖",1,2,4,2,"4","6000",2900,1.5,5,3000,["gold:1"],[500,9500],2],[90,6,"李存勖",1,2,5,2,"4","6000",2935,1.5,5,3000,["gold:1"],[500,9500],2],[91,6,"李存勖",1,3,1,1,"12","2000",2970,1.5,5,3000,["gold:1"],[500,9500],1],[92,6,"李存勖",1,3,2,2,"4","6000",3005,1.5,5,3000,["gold:1"],[500,9500],2],[93,6,"李存勖",1,3,3,3,"6","4000",3040,1.5,5,3000,["gold:1"],[500,9500],3],[94,6,"李存勖",1,3,4,2,"4","6000",3075,1.5,5,3000,["gold:1"],[500,9500],2],[95,6,"李存勖",1,3,5,1,"12","2000",3110,1.5,5,3000,["gold:1"],[500,9500],1],[96,6,"李存勖",1,4,1,2,"4","6000",3145,1.5,5,3000,["box:3:1"],[500,9500],2],[97,6,"李存勖",1,4,2,1,"12","2000",3180,1.5,5,3000,["box:3:1"],[500,9500],1],[98,6,"李存勖",1,4,3,-1,"8","3000",3215,1.5,5,3000,["box:3:1"],[500,9500],4],[99,6,"李存勖",1,4,4,1,"12","2000",3250,1.5,5,3000,["box:3:1"],[500,9500],1],[100,6,"李存勖",1,4,5,2,"4","6000",3285,1.5,5,3000,["box:3:1"],[500,9500],2],[101,7,"AA_12",1,1,1,3,"6","4000",3320,1.5,5,3000,["gold:1"],[500,9500],3],[102,7,"AA_12",1,1,2,3,"6","4000",3355,1.5,5,3000,["gold:1"],[500,9500],3],[103,7,"AA_12",1,1,3,1,"12","2000",3390,1.5,5,3000,["gold:1"],[500,9500],1],[104,7,"AA_12",1,1,4,3,"6","4000",3425,1.5,5,3000,["gold:1"],[500,9500],3],[105,7,"AA_12",1,1,5,3,"6","4000",3460,1.5,5,3000,["gold:1"],[500,9500],3],[106,7,"AA_12",1,2,1,1,"12","2000",3495,1.5,5,3000,["gold:1"],[500,9500],1],[107,7,"AA_12",1,2,2,2,"4","6000",3530,1.5,5,3000,["gold:1"],[500,9500],2],[108,7,"AA_12",1,2,3,3,"6","4000",3565,1.5,5,3000,["gold:1"],[500,9500],3],[109,7,"AA_12",1,2,4,2,"4","6000",3600,1.5,5,3000,["gold:1"],[500,9500],2],[110,7,"AA_12",1,2,5,1,"12","2000",3635,1.5,5,3000,["gold:1"],[500,9500],1],[111,7,"AA_12",1,3,1,2,"4","6000",3670,1.5,5,3000,["gold:1"],[500,9500],2],[112,7,"AA_12",1,3,2,1,"12","2000",3705,1.5,5,3000,["gold:1"],[500,9500],1],[113,7,"AA_12",1,3,3,3,"6","4000",3740,1.5,5,3000,["gold:1"],[500,9500],3],[114,7,"AA_12",1,3,4,1,"12","2000",3775,1.5,5,3000,["gold:1"],[500,9500],1],[115,7,"AA_12",1,3,5,2,"4","6000",3810,1.5,5,3000,["gold:1"],[500,9500],2],[116,7,"AA_12",1,4,1,2,"4","6000",3845,1.5,5,3000,["box:3:1"],[500,9500],2],[117,7,"AA_12",1,4,2,2,"4","6000",3880,1.5,5,3000,["box:3:1"],[500,9500],2],[118,7,"AA_12",1,4,3,-1,"8","3000",3915,1.5,5,3000,["box:3:1"],[500,9500],4],[119,7,"AA_12",1,4,4,3,"6","4000",3950,1.5,5,3000,["box:3:1"],[500,9500],3],[120,7,"AA_12",1,4,5,3,"6","4000",3985,1.5,5,3000,["box:3:1"],[500,9500],3],[121,8,"米高扬",2,1,1,1,"6","4000",4020,1.5,5,3000,["gold:1"],[500,9500],1],[122,8,"米高扬",2,1,2,1,"6","4000",4055,1.5,5,3000,["gold:1"],[500,9500],1],[123,8,"米高扬",2,1,3,1,"12","2000",4090,1.5,5,3000,["gold:1"],[500,9500],1],[124,8,"米高扬",2,1,4,1,"6","4000",4125,1.5,5,3000,["gold:1"],[500,9500],1],[125,8,"米高扬",2,1,5,1,"6","4000",4160,1.5,5,3000,["gold:1"],[500,9500],1],[126,8,"米高扬",2,2,1,2,"12","2000",4195,1.5,5,3000,["gold:1"],[500,9500],2],[127,8,"米高扬",2,2,2,2,"4","6000",4230,1.5,5,3000,["gold:1"],[500,9500],2],[128,8,"米高扬",2,2,3,2,"6","4000",4265,1.5,5,3000,["gold:1"],[500,9500],2],[129,8,"米高扬",2,2,4,2,"4","6000",4300,1.5,5,3000,["gold:1"],[500,9500],2],[130,8,"米高扬",2,2,5,2,"12","2000",4335,1.5,5,3000,["gold:1"],[500,9500],2],[131,8,"米高扬",2,3,1,3,"4","6000",4370,1.5,5,3000,["gold:1"],[500,9500],3],[132,8,"米高扬",2,3,2,3,"12","2000",4405,1.5,5,3000,["gold:1"],[500,9500],3],[133,8,"米高扬",2,3,3,3,"6","4000",4440,1.5,5,3000,["gold:1"],[500,9500],3],[134,8,"米高扬",2,3,4,3,"12","2000",4475,1.5,5,3000,["gold:1"],[500,9500],3],[135,8,"米高扬",2,3,5,3,"4","6000",4510,1.5,5,3000,["gold:1"],[500,9500],3],[136,8,"米高扬",2,4,1,-1,"4","6000",4545,1.5,5,3000,["box:3:1"],[500,9500],4],[137,8,"米高扬",2,4,2,-1,"4","6000",4580,1.5,5,3000,["box:3:1"],[500,9500],4],[138,8,"米高扬",2,4,3,-1,"8","3000",4615,1.5,5,3000,["box:3:1"],[500,9500],4],[139,8,"米高扬",2,4,4,-1,"6","4000",4650,1.5,5,3000,["box:3:1"],[500,9500],4],[140,8,"米高扬",2,4,5,-1,"6","4000",4685,1.5,5,3000,["box:3:1"],[500,9500],4],[141,9,"安德罗波夫",1,1,1,2,"6","4000",4720,1.5,5,3000,["gold:1"],[500,9500],2],[142,9,"安德罗波夫",1,1,2,2,"6","4000",4755,1.5,5,3000,["gold:1"],[500,9500],2],[143,9,"安德罗波夫",1,1,3,1,"12","2000",4790,1.5,5,3000,["gold:1"],[500,9500],1],[144,9,"安德罗波夫",1,1,4,2,"6","4000",4825,1.5,5,3000,["gold:1"],[500,9500],2],[145,9,"安德罗波夫",1,1,5,2,"6","4000",4860,1.5,5,3000,["gold:1"],[500,9500],2],[146,9,"安德罗波夫",1,2,1,3,"12","2000",4895,1.5,5,3000,["gold:1"],[500,9500],3],[147,9,"安德罗波夫",1,2,2,3,"4","6000",4930,1.5,5,3000,["gold:1"],[500,9500],3],[148,9,"安德罗波夫",1,2,3,2,"6","4000",4965,1.5,5,3000,["gold:1"],[500,9500],2],[149,9,"安德罗波夫",1,2,4,3,"4","6000",5000,1.5,5,3000,["gold:1"],[500,9500],3],[150,9,"安德罗波夫",1,2,5,3,"12","2000",5035,1.5,5,3000,["gold:1"],[500,9500],3],[151,9,"安德罗波夫",1,3,1,1,"4","6000",5070,1.5,5,3000,["gold:1"],[500,9500],1],[152,9,"安德罗波夫",1,3,2,1,"12","2000",5105,1.5,5,3000,["gold:1"],[500,9500],1],[153,9,"安德罗波夫",1,3,3,1,"6","4000",5140,1.5,5,3000,["gold:1"],[500,9500],1],[154,9,"安德罗波夫",1,3,4,1,"12","2000",5175,1.5,5,3000,["gold:1"],[500,9500],1],[155,9,"安德罗波夫",1,3,5,1,"4","6000",5210,1.5,5,3000,["gold:1"],[500,9500],1],[156,9,"安德罗波夫",1,4,1,2,"4","6000",5245,1.5,5,3000,["box:3:1"],[500,9500],2],[157,9,"安德罗波夫",1,4,2,-1,"4","6000",5280,1.5,5,3000,["box:3:1"],[500,9500],4],[158,9,"安德罗波夫",1,4,3,-1,"8","3000",5315,1.5,5,3000,["box:3:1"],[500,9500],4],[159,9,"安德罗波夫",1,4,4,-1,"6","4000",5350,1.5,5,3000,["box:3:1"],[500,9500],4],[160,9,"安德罗波夫",1,4,5,2,"6","4000",5385,1.5,5,3000,["box:3:1"],[500,9500],2],[161,10,"腓特烈",1,1,1,2,"4","4000",5420,1.5,5,3000,["gold:1"],[500,9500],2],[162,10,"腓特烈",1,1,2,2,"4","4000",5455,1.5,5,3000,["gold:1"],[500,9500],2],[163,10,"腓特烈",1,1,3,2,"4","2000",5490,1.5,5,3000,["gold:1"],[500,9500],2],[164,10,"腓特烈",1,1,4,2,"4","4000",5525,1.5,5,3000,["gold:1"],[500,9500],2],[165,10,"腓特烈",1,1,5,2,"4","4000",5560,1.5,5,3000,["gold:1"],[500,9500],2],[166,10,"腓特烈",1,2,1,3,"6","2000",5595,1.5,5,3000,["gold:1"],[500,9500],3],[167,10,"腓特烈",1,2,2,3,"6","6000",5630,1.5,5,3000,["gold:1"],[500,9500],3],[168,10,"腓特烈",1,2,3,3,"6","4000",5665,1.5,5,3000,["gold:1"],[500,9500],3],[169,10,"腓特烈",1,2,4,3,"6","6000",5700,1.5,5,3000,["gold:1"],[500,9500],3],[170,10,"腓特烈",1,2,5,3,"6","2000",5735,1.5,5,3000,["gold:1"],[500,9500],3],[171,10,"腓特烈",1,3,1,1,"12","6000",5770,1.5,5,3000,["gold:1"],[500,9500],1],[172,10,"腓特烈",1,3,2,1,"12","2000",5805,1.5,5,3000,["gold:1"],[500,9500],1],[173,10,"腓特烈",1,3,3,1,"12","4000",5840,1.5,5,3000,["gold:1"],[500,9500],1],[174,10,"腓特烈",1,3,4,1,"12","2000",5875,1.5,5,3000,["gold:1"],[500,9500],1],[175,10,"腓特烈",1,3,5,1,"12","6000",5910,1.5,5,3000,["gold:1"],[500,9500],1],[176,10,"腓特烈",1,4,1,1,"12","6000",5945,1.5,5,3000,["box:3:1"],[500,9500],1],[177,10,"腓特烈",1,4,2,2,"4","6000",5980,1.5,5,3000,["box:3:1"],[500,9500],4],[178,10,"腓特烈",1,4,3,3,"6","3000",6015,1.5,5,3000,["box:3:1"],[500,9500],4],[179,10,"腓特烈",1,4,4,2,"4","4000",6050,1.5,5,3000,["box:3:1"],[500,9500],4],[180,10,"腓特烈",1,4,5,1,"12","4000",6085,1.5,5,3000,["box:3:1"],[500,9500],1],[181,11,"林肯",1,1,1,2,"4","4000",6120,1.5,5,3000,["gold:1"],[500,9500],2],[182,11,"林肯",1,1,2,2,"4","4000",6155,1.5,5,3000,["gold:1"],[500,9500],2],[183,11,"林肯",1,1,3,1,"12","2000",6190,1.5,5,3000,["gold:1"],[500,9500],1],[184,11,"林肯",1,1,4,2,"4","4000",6225,1.5,5,3000,["gold:1"],[500,9500],2],[185,11,"林肯",1,1,5,2,"4","4000",6260,1.5,5,3000,["gold:1"],[500,9500],2],[186,11,"林肯",1,2,1,3,"6","2000",6295,1.5,5,3000,["gold:1"],[500,9500],3],[187,11,"林肯",1,2,2,3,"6","6000",6330,1.5,5,3000,["gold:1"],[500,9500],3],[188,11,"林肯",1,2,3,2,"4","4000",6365,1.5,5,3000,["gold:1"],[500,9500],2],[189,11,"林肯",1,2,4,3,"6","6000",6400,1.5,5,3000,["gold:1"],[500,9500],3],[190,11,"林肯",1,2,5,3,"6","2000",6435,1.5,5,3000,["gold:1"],[500,9500],3],[191,11,"林肯",1,3,1,1,"12","6000",6470,1.5,5,3000,["gold:1"],[500,9500],1],[192,11,"林肯",1,3,2,1,"12","2000",6505,1.5,5,3000,["gold:1"],[500,9500],1],[193,11,"林肯",1,3,3,1,"12","4000",6540,1.5,5,3000,["gold:1"],[500,9500],1],[194,11,"林肯",1,3,4,1,"12","2000",6575,1.5,5,3000,["gold:1"],[500,9500],1],[195,11,"林肯",1,3,5,1,"12","6000",6610,1.5,5,3000,["gold:1"],[500,9500],1],[196,11,"林肯",1,4,1,2,"4","6000",6645,1.5,5,3000,["box:3:1"],[500,9500],2],[197,11,"林肯",1,4,2,-1,"8","6000",6680,1.5,5,3000,["box:3:1"],[500,9500],4],[198,11,"林肯",1,4,3,-1,"8","3000",6715,1.5,5,3000,["box:3:1"],[500,9500],4],[199,11,"林肯",1,4,4,-1,"8","4000",6750,1.5,5,3000,["box:3:1"],[500,9500],4],[200,11,"林肯",1,4,5,2,"4","4000",6785,1.5,5,3000,["box:3:1"],[500,9500],2],[201,12,"卡扎菲",1,1,1,2,"4","4000",6820,1.5,5,3000,["gold:1"],[500,9500],2],[202,12,"卡扎菲",1,1,2,2,"4","4000",6855,1.5,5,3000,["gold:1"],[500,9500],2],[203,12,"卡扎菲",1,1,3,1,"12","2000",6890,1.5,5,3000,["gold:1"],[500,9500],1],[204,12,"卡扎菲",1,1,4,2,"4","4000",6925,1.5,5,3000,["gold:1"],[500,9500],2],[205,12,"卡扎菲",1,1,5,2,"4","4000",6960,1.5,5,3000,["gold:1"],[500,9500],2],[206,12,"卡扎菲",1,2,1,3,"6","2000",6995,1.5,5,3000,["gold:1"],[500,9500],3],[207,12,"卡扎菲",1,2,2,3,"6","6000",7030,1.5,5,3000,["gold:1"],[500,9500],3],[208,12,"卡扎菲",1,2,3,2,"4","4000",7065,1.5,5,3000,["gold:1"],[500,9500],2],[209,12,"卡扎菲",1,2,4,3,"6","6000",7100,1.5,5,3000,["gold:1"],[500,9500],3],[210,12,"卡扎菲",1,2,5,3,"6","2000",7135,1.5,5,3000,["gold:1"],[500,9500],3],[211,12,"卡扎菲",1,3,1,1,"12","6000",7170,1.5,5,3000,["gold:1"],[500,9500],1],[212,12,"卡扎菲",1,3,2,1,"12","2000",7205,1.5,5,3000,["gold:1"],[500,9500],1],[213,12,"卡扎菲",1,3,3,1,"12","4000",7240,1.5,5,3000,["gold:1"],[500,9500],1],[214,12,"卡扎菲",1,3,4,1,"12","2000",7275,1.5,5,3000,["gold:1"],[500,9500],1],[215,12,"卡扎菲",1,3,5,1,"12","6000",7310,1.5,5,3000,["gold:1"],[500,9500],1],[216,12,"卡扎菲",1,4,1,2,"4","6000",7345,1.5,5,3000,["box:3:1"],[500,9500],2],[217,12,"卡扎菲",1,4,2,-1,"8","6000",7380,1.5,5,3000,["box:3:1"],[500,9500],4],[218,12,"卡扎菲",1,4,3,-1,"8","3000",7415,1.5,5,3000,["box:3:1"],[500,9500],4],[219,12,"卡扎菲",1,4,4,-1,"8","4000",7450,1.5,5,3000,["box:3:1"],[500,9500],4],[220,12,"卡扎菲",1,4,5,2,"4","4000",7485,1.5,5,3000,["box:3:1"],[500,9500],2],[221,12,"卡扎菲",1,5,1,2,"4","4000",7520,1.5,5,3000,["gold:1"],[500,9500],2],[222,12,"卡扎菲",1,5,2,2,"4","4000",7555,1.5,5,3000,["gold:1"],[500,9500],2],[223,12,"卡扎菲",1,5,3,1,"12","2000",7590,1.5,5,3000,["gold:1"],[500,9500],1],[224,12,"卡扎菲",1,5,4,2,"4","4000",7625,1.5,5,3000,["gold:1"],[500,9500],2],[225,12,"卡扎菲",1,5,5,2,"4","4000",7660,1.5,5,3000,["gold:1"],[500,9500],2],[226,12,"卡扎菲",1,6,1,3,"6","2000",7695,1.5,5,3000,["gold:1"],[500,9500],3],[227,12,"卡扎菲",1,6,2,3,"6","6000",7730,1.5,5,3000,["gold:1"],[500,9500],3],[228,12,"卡扎菲",1,6,3,2,"4","4000",7765,1.5,5,3000,["gold:1"],[500,9500],2],[229,12,"卡扎菲",1,6,4,3,"6","6000",7800,1.5,5,3000,["gold:1"],[500,9500],3],[230,12,"卡扎菲",1,6,5,3,"6","2000",7835,1.5,5,3000,["gold:1"],[500,9500],3],[231,12,"卡扎菲",1,7,1,1,"12","6000",7870,1.5,5,3000,["gold:1"],[500,9500],1],[232,12,"卡扎菲",1,7,2,1,"12","2000",7905,1.5,5,3000,["gold:1"],[500,9500],1],[233,12,"卡扎菲",1,7,3,1,"12","4000",7940,1.5,5,3000,["gold:1"],[500,9500],1],[234,12,"卡扎菲",1,7,4,1,"12","2000",7975,1.5,5,3000,["gold:1"],[500,9500],1],[235,12,"卡扎菲",1,7,5,1,"12","6000",8010,1.5,5,3000,["gold:1"],[500,9500],1],[236,12,"卡扎菲",1,8,1,2,"4","6000",8045,1.5,5,3000,["box:3:1"],[500,9500],2],[237,12,"卡扎菲",1,8,2,-1,"8","6000",8080,1.5,5,3000,["box:3:1"],[500,9500],4],[238,12,"卡扎菲",1,8,3,-1,"8","3000",8115,1.5,5,3000,["box:3:1"],[500,9500],4],[239,12,"卡扎菲",1,8,4,-1,"8","4000",8150,1.5,5,3000,["box:3:1"],[500,9500],4],[240,12,"卡扎菲",1,8,5,2,"4","4000",8185,1.5,5,3000,["box:3:1"],[500,9500],2]]