From 23ef235a263191230031dfaa02c054197fdddd91 Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Tue, 20 Oct 2020 14:08:19 +0800
Subject: [PATCH] 完善PVE界面逻辑,使用正式的界面资源 解决bug:1.打掉小怪没有获得金币 2.摧毁塔位 塔没有消失

---
 Assets/Materials/PVE/drop.png.meta                                        |   40 
 Assets/StreamingAssets/Table/donateshop.json                              |    1 
 Assets/StreamingAssets/Table/endless_enemy.json                           |    2 
 GemBattle/宝石塔防_Data/Managed/Unity.TextMeshPro.dll                         |    0 
 Assets/Materials/PVE/01效果图-PVE战斗.jpg.meta                                 |   40 
 GemBattle/宝石塔防_Data/sharedassets0.assets                                  |    0 
 GemBattle/宝石塔防_Data/resources.assets                                      |    0 
 GemBattle/宝石塔防_Data/level3                                                |    0 
 Assets/Materials/PVE/victoryTitle.png.meta                                |   40 
 GemBattle/宝石塔防_Data/level2                                                |    0 
 Assets/Scenes/Levels/Battle/Endless.unity                                 | 4196 ++++++++++++++++--
 Assets/Materials/PVE/07标注.jpg.meta                                        |   40 
 Assets/Materials/PVE/RewardInfo.png                                       |    0 
 GemBattle/宝石塔防_Data/globalgamemanagers.assets                             |    0 
 GemBattle/宝石塔防_Data/globalgamemanagers                                    |    0 
 Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs                      |   42 
 Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs                       |  101 
 Assets/Scripts/Net/NetExtends/Game.cs                                     | 4156 ++++++++++++++++++
 Assets/Materials/PVE/PVEBg.png.meta                                       |    8 
 GemBattle/宝石塔防_Data/level0                                                |    0 
 GemBattle/宝石塔防_Data/level1                                                |    0 
 Assets/StreamingAssets/Table/scoreshop.json                               |    1 
 Assets/Scripts/TowerDefense/Economy/LootDrop.cs                           |  165 
 Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs            |   51 
 GemBattle/宝石塔防_Data/Managed/Assembly-CSharp.dll                           |    0 
 Assets/Scripts/Enum/EndlessBuffSelectState.cs                             |   19 
 Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs                          |   33 
 Assets/Materials/PVE/06标注.jpg.meta                                        |   40 
 Assets/StreamingAssets/Table/donateshop.json.meta                         |    7 
 Assets/Materials/PVE/treasure_2.png.meta                                  |   40 
 GemBattle/宝石塔防_Data/sharedassets2.assets                                  |    0 
 Assets/Scripts/Data/EndlessPortData.cs                                    |   20 
 Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs.meta       |    2 
 Assets/Materials/PVE/diamond.png.meta                                     |   40 
 Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs.meta                  |    2 
 Assets/Scripts/Net/NetExtends/Opcode.cs                                   |   48 
 Assets/StreamingAssets/Table/endless_port.json                            |    2 
 And/GemBattle.apk                                                         |    0 
 Assets/Scripts/Json/JsonDataCenter.cs                                     |    2 
 Assets/Prefabs/UI/PropIcon.prefab.meta                                    |    7 
 GemBattle/宝石塔防_Data/sharedassets1.assets                                  |    0 
 Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs                      |   96 
 Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs.meta                  |    2 
 Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs                  |   46 
 GemBattle/宝石塔防_Data/sharedassets3.assets                                  |    0 
 Assets/StreamingAssets/Table/scoreshop.json.meta                          |    7 
 GemBattle/宝石塔防_Data/sharedassets2.assets.resS                             |    0 
 Assets/Materials/PVE/propDi_0.png.meta                                    |   40 
 Assets/Prefabs/UI/BuffIcon.prefab                                         |  500 ++
 Assets/Prefabs/UI/BuffIcon.prefab.meta                                    |    7 
 Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs |    2 
 Assets/Materials/PVE/diamond.png                                          |    0 
 GemBattle/宝石塔防_Data/Managed/MoreMountains.NiceVibrations.Haptics.dll      |    0 
 Assets/Materials/PVE/RewardInfo.png.meta                                  |   42 
 Assets/StreamingAssets/Table/notice.json                                  |    1 
 Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs.meta                 |    2 
 GemBattle/宝石塔防_Data/StreamingAssets/Table/endless_buff.json               |    2 
 Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs.meta                 |    2 
 Assets/Materials/PVE/treasure_0.png.meta                                  |   40 
 GemBattle/宝石塔防_Data/Managed/UnityEngine.UI.dll                            |    0 
 Assets/Materials/PVE/speed_2.png.meta                                     |   40 
 Assets/Materials/PVE/propDi_3.png.meta                                    |   40 
 Assets/Scripts/Enum/EndlessBuffSelectState.cs.meta                        |    2 
 Assets/Materials/PVE/PVEBg.png                                            |    0 
 Assets/Materials/PVE/check.png.meta                                       |   40 
 Assets/Materials/PVE/buffMask.png.meta                                    |   40 
 Assets/Materials/PVE/line.png.meta                                        |   40 
 GemBattle/宝石塔防_Data/Managed/MoreMountains.NiceVibrations.Demos.dll        |    0 
 Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs                       |   31 
 Assets/Materials/PVE/propDi_2.png.meta                                    |   40 
 GemBattle/宝石塔防_Data/Managed/MoreMountains.NiceVibrations.dll              |    0 
 Assets/Scripts/Data/EndlessBuffData.cs                                    |   23 
 GemBattle/宝石塔防_Data/StreamingAssets/Table/endless_port.json               |    2 
 GemBattle/宝石塔防_Data/StreamingAssets/Table/scoreshop.json                  |    1 
 Assets/StreamingAssets/Table/endless_buff.json                            |    2 
 Assets/Prefabs/UI/PropIcon.prefab                                         |  189 
 Assets/Materials/PVE/speed_1.png.meta                                     |   40 
 Assets/Materials/PVE/propDi_1.png.meta                                    |   40 
 /dev/null                                                                 |   37 
 Assets/Scripts/TowerDefense/Level/EndlessWave.cs                          |    2 
 Assets/Scripts/Net/NetExtends/Common.cs                                   | 2068 +++++++++
 GemBattle/宝石塔防_Data/Managed/Assembly-CSharp-firstpass.dll                 |    0 
 Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs                       |  106 
 Assets/Scripts/Net/NetExtends/NetMapping.cs                               |   56 
 GemBattle/宝石塔防_Data/StreamingAssets/Table/donateshop.json                 |    1 
 Assets/Materials/PVE/03效果图-选择完成.jpg.meta                                  |   40 
 GemBattle/宝石塔防_Data/StreamingAssets/Table/notice.json                     |    1 
 Assets/Materials/PVE/05标注.jpg.meta                                        |   40 
 GemBattle/宝石塔防_Data/StreamingAssets/Table/endless_enemy.json              |    2 
 Assets/Scripts/Net/NetExtends/Table.cs                                    |  181 
 GemBattle/宝石塔防_Data/sharedassets3.assets.resS                             |    0 
 GemBattle/宝石塔防_Data/Managed/Unity.Timeline.dll                            |    0 
 Assets/StreamingAssets/Table/notice.json.meta                             |    7 
 Assets/Scenes/Levels/Battle/GemBattle.unity                               |   20 
 Assets/Materials/PVE/04效果图-结算.jpg.meta                                    |   40 
 Assets/Materials/PVE/treasure_1.png.meta                                  |   40 
 96 files changed, 12,162 insertions(+), 983 deletions(-)

diff --git a/And/GemBattle.apk b/And/GemBattle.apk
index fabff39..bee26e8 100644
--- a/And/GemBattle.apk
+++ b/And/GemBattle.apk
Binary files differ
diff --git "a/Assets/Materials/PVE/01\346\225\210\346\236\234\345\233\276-PVE\346\210\230\346\226\227.jpg.meta" "b/Assets/Materials/PVE/01\346\225\210\346\236\234\345\233\276-PVE\346\210\230\346\226\227.jpg.meta"
index b1485b8..ce81bfe 100644
--- "a/Assets/Materials/PVE/01\346\225\210\346\236\234\345\233\276-PVE\346\210\230\346\226\227.jpg.meta"
+++ "b/Assets/Materials/PVE/01\346\225\210\346\236\234\345\233\276-PVE\346\210\230\346\226\227.jpg.meta"
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git "a/Assets/Materials/PVE/03\346\225\210\346\236\234\345\233\276-\351\200\211\346\213\251\345\256\214\346\210\220.jpg.meta" "b/Assets/Materials/PVE/03\346\225\210\346\236\234\345\233\276-\351\200\211\346\213\251\345\256\214\346\210\220.jpg.meta"
index 7474164..d2fafe6 100644
--- "a/Assets/Materials/PVE/03\346\225\210\346\236\234\345\233\276-\351\200\211\346\213\251\345\256\214\346\210\220.jpg.meta"
+++ "b/Assets/Materials/PVE/03\346\225\210\346\236\234\345\233\276-\351\200\211\346\213\251\345\256\214\346\210\220.jpg.meta"
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git "a/Assets/Materials/PVE/04\346\225\210\346\236\234\345\233\276-\347\273\223\347\256\227.jpg.meta" "b/Assets/Materials/PVE/04\346\225\210\346\236\234\345\233\276-\347\273\223\347\256\227.jpg.meta"
index a14e0ec..79d4160 100644
--- "a/Assets/Materials/PVE/04\346\225\210\346\236\234\345\233\276-\347\273\223\347\256\227.jpg.meta"
+++ "b/Assets/Materials/PVE/04\346\225\210\346\236\234\345\233\276-\347\273\223\347\256\227.jpg.meta"
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git "a/Assets/Materials/PVE/05\346\240\207\346\263\250.jpg.meta" "b/Assets/Materials/PVE/05\346\240\207\346\263\250.jpg.meta"
index 5e3352a..5eadefc 100644
--- "a/Assets/Materials/PVE/05\346\240\207\346\263\250.jpg.meta"
+++ "b/Assets/Materials/PVE/05\346\240\207\346\263\250.jpg.meta"
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git "a/Assets/Materials/PVE/06\346\240\207\346\263\250.jpg.meta" "b/Assets/Materials/PVE/06\346\240\207\346\263\250.jpg.meta"
index ba3749b..bcf691b 100644
--- "a/Assets/Materials/PVE/06\346\240\207\346\263\250.jpg.meta"
+++ "b/Assets/Materials/PVE/06\346\240\207\346\263\250.jpg.meta"
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git "a/Assets/Materials/PVE/07\346\240\207\346\263\250.jpg.meta" "b/Assets/Materials/PVE/07\346\240\207\346\263\250.jpg.meta"
index 920ee38..e6c1ec2 100644
--- "a/Assets/Materials/PVE/07\346\240\207\346\263\250.jpg.meta"
+++ "b/Assets/Materials/PVE/07\346\240\207\346\263\250.jpg.meta"
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/PVEBg.png b/Assets/Materials/PVE/PVEBg.png
index b21f84b..2319a53 100644
--- a/Assets/Materials/PVE/PVEBg.png
+++ b/Assets/Materials/PVE/PVEBg.png
Binary files differ
diff --git a/Assets/Materials/PVE/PVEBg.png.meta b/Assets/Materials/PVE/PVEBg.png.meta
index d9f66df..fd37a5f 100644
--- a/Assets/Materials/PVE/PVEBg.png.meta
+++ b/Assets/Materials/PVE/PVEBg.png.meta
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -89,7 +89,7 @@
     buildTarget: Android
     maxTextureSize: 2048
     resizeAlgorithm: 0
-    textureFormat: 4
+    textureFormat: 34
     textureCompression: 1
     compressionQuality: 50
     crunchedCompression: 0
@@ -103,7 +103,7 @@
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/buffInfo.png b/Assets/Materials/PVE/RewardInfo.png
similarity index 100%
rename from Assets/Materials/PVE/buffInfo.png
rename to Assets/Materials/PVE/RewardInfo.png
Binary files differ
diff --git a/Assets/Materials/PVE/buffInfo.png.meta b/Assets/Materials/PVE/RewardInfo.png.meta
similarity index 68%
rename from Assets/Materials/PVE/buffInfo.png.meta
rename to Assets/Materials/PVE/RewardInfo.png.meta
index 05a60c2..4154a23 100644
--- a/Assets/Materials/PVE/buffInfo.png.meta
+++ b/Assets/Materials/PVE/RewardInfo.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,24 +35,24 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
   spritePivot: {x: 0.5, y: 0.5}
   spritePixelsToUnits: 100
-  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteBorder: {x: 39, y: 46, z: 51, w: 42}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/buffMask.png.meta b/Assets/Materials/PVE/buffMask.png.meta
index fbbc446..36ee8f7 100644
--- a/Assets/Materials/PVE/buffMask.png.meta
+++ b/Assets/Materials/PVE/buffMask.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/check.png.meta b/Assets/Materials/PVE/check.png.meta
index 6507299..0c8b6b4 100644
--- a/Assets/Materials/PVE/check.png.meta
+++ b/Assets/Materials/PVE/check.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git "a/Assets/Materials/PVE/\345\233\276\346\240\20704.png" b/Assets/Materials/PVE/diamond.png
similarity index 100%
rename from "Assets/Materials/PVE/\345\233\276\346\240\20704.png"
rename to Assets/Materials/PVE/diamond.png
Binary files differ
diff --git "a/Assets/Materials/PVE/\345\233\276\346\240\20704.png.meta" b/Assets/Materials/PVE/diamond.png.meta
similarity index 70%
rename from "Assets/Materials/PVE/\345\233\276\346\240\20704.png.meta"
rename to Assets/Materials/PVE/diamond.png.meta
index 7132160..e91e9b1 100644
--- "a/Assets/Materials/PVE/\345\233\276\346\240\20704.png.meta"
+++ b/Assets/Materials/PVE/diamond.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/drop.png.meta b/Assets/Materials/PVE/drop.png.meta
index 6b96cba..132d14a 100644
--- a/Assets/Materials/PVE/drop.png.meta
+++ b/Assets/Materials/PVE/drop.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/line.png.meta b/Assets/Materials/PVE/line.png.meta
index 8782945..4fbef74 100644
--- a/Assets/Materials/PVE/line.png.meta
+++ b/Assets/Materials/PVE/line.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/propDi_0.png.meta b/Assets/Materials/PVE/propDi_0.png.meta
index 6cb1569..d2a663e 100644
--- a/Assets/Materials/PVE/propDi_0.png.meta
+++ b/Assets/Materials/PVE/propDi_0.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/propDi_1.png.meta b/Assets/Materials/PVE/propDi_1.png.meta
index e9dbc11..827829f 100644
--- a/Assets/Materials/PVE/propDi_1.png.meta
+++ b/Assets/Materials/PVE/propDi_1.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/propDi_2.png.meta b/Assets/Materials/PVE/propDi_2.png.meta
index 588eedf..a803cb1 100644
--- a/Assets/Materials/PVE/propDi_2.png.meta
+++ b/Assets/Materials/PVE/propDi_2.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/propDi_3.png.meta b/Assets/Materials/PVE/propDi_3.png.meta
index 70a8db4..714a017 100644
--- a/Assets/Materials/PVE/propDi_3.png.meta
+++ b/Assets/Materials/PVE/propDi_3.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/speed_1.png.meta b/Assets/Materials/PVE/speed_1.png.meta
index b5bb3a3..1406e6e 100644
--- a/Assets/Materials/PVE/speed_1.png.meta
+++ b/Assets/Materials/PVE/speed_1.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/speed_2.png.meta b/Assets/Materials/PVE/speed_2.png.meta
index ee8dd98..483ad7a 100644
--- a/Assets/Materials/PVE/speed_2.png.meta
+++ b/Assets/Materials/PVE/speed_2.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/treasure_0.png.meta b/Assets/Materials/PVE/treasure_0.png.meta
index 7e6b644..0034e1c 100644
--- a/Assets/Materials/PVE/treasure_0.png.meta
+++ b/Assets/Materials/PVE/treasure_0.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/treasure_1.png.meta b/Assets/Materials/PVE/treasure_1.png.meta
index 5a969e6..9d549da 100644
--- a/Assets/Materials/PVE/treasure_1.png.meta
+++ b/Assets/Materials/PVE/treasure_1.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/treasure_2.png.meta b/Assets/Materials/PVE/treasure_2.png.meta
index 6ec2f75..d4f2356 100644
--- a/Assets/Materials/PVE/treasure_2.png.meta
+++ b/Assets/Materials/PVE/treasure_2.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Materials/PVE/victoryTitle.png.meta b/Assets/Materials/PVE/victoryTitle.png.meta
index b183fe3..c0417c4 100644
--- a/Assets/Materials/PVE/victoryTitle.png.meta
+++ b/Assets/Materials/PVE/victoryTitle.png.meta
@@ -6,7 +6,7 @@
   serializedVersion: 11
   mipmaps:
     mipMapMode: 0
-    enableMipMap: 1
+    enableMipMap: 0
     sRGBTexture: 1
     linearTexture: 0
     fadeOut: 0
@@ -35,13 +35,13 @@
     filterMode: -1
     aniso: -1
     mipBias: -100
-    wrapU: -1
-    wrapV: -1
+    wrapU: 1
+    wrapV: 1
     wrapW: -1
-  nPOTScale: 1
+  nPOTScale: 0
   lightmap: 0
   compressionQuality: 50
-  spriteMode: 0
+  spriteMode: 1
   spriteExtrude: 1
   spriteMeshType: 1
   alignment: 0
@@ -50,9 +50,9 @@
   spriteBorder: {x: 0, y: 0, z: 0, w: 0}
   spriteGenerateFallbackPhysicsShape: 1
   alphaUsage: 1
-  alphaIsTransparency: 0
+  alphaIsTransparency: 1
   spriteTessellationDetail: -1
-  textureType: 0
+  textureType: 8
   textureShape: 1
   singleChannelComponent: 0
   maxTextureSizeSet: 0
@@ -73,13 +73,37 @@
     overridden: 0
     androidETC2FallbackOverride: 0
     forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 34
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
   spriteSheet:
     serializedVersion: 2
     sprites: []
     outline: []
     physicsShape: []
     bones: []
-    spriteID: 
+    spriteID: 5e97eb03825dee720800000000000000
     internalID: 0
     vertices: []
     indices: 
diff --git a/Assets/Prefabs/UI/BuffIcon.prefab b/Assets/Prefabs/UI/BuffIcon.prefab
new file mode 100644
index 0000000..4539d3d
--- /dev/null
+++ b/Assets/Prefabs/UI/BuffIcon.prefab
@@ -0,0 +1,500 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &52827698229886892
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3580160415418532223}
+  - component: {fileID: 4214714758741971458}
+  - component: {fileID: 6037807312347287293}
+  m_Layer: 5
+  m_Name: Check
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3580160415418532223
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 52827698229886892}
+  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: 2534349791647881055}
+  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}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 203, y: 150}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4214714758741971458
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 52827698229886892}
+  m_CullTransparentMesh: 0
+--- !u!114 &6037807312347287293
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 52827698229886892}
+  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: 1f5391d94c7332748836aee38008902f, 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!1 &2515353736330966855
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2515353736330966852}
+  - component: {fileID: 2515353736330966874}
+  - component: {fileID: 2515353736330966853}
+  m_Layer: 5
+  m_Name: Icon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2515353736330966852
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2515353736330966855}
+  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: 2534349791647881055}
+  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: 0}
+  m_SizeDelta: {x: 250, y: 250}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2515353736330966874
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2515353736330966855}
+  m_CullTransparentMesh: 0
+--- !u!114 &2515353736330966853
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2515353736330966855}
+  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: ce200e369ceee4c4aaca2de879512bc7, 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!1 &2515353736340248142
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2515353736340248143}
+  - component: {fileID: 2515353736340248141}
+  - component: {fileID: 2515353736340248140}
+  m_Layer: 5
+  m_Name: Name
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2515353736340248143
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2515353736340248142}
+  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: 2534349791647881055}
+  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}
+  m_AnchoredPosition: {x: 1, y: -167}
+  m_SizeDelta: {x: 300, y: 40}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2515353736340248141
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2515353736340248142}
+  m_CullTransparentMesh: 0
+--- !u!114 &2515353736340248140
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2515353736340248142}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.5137255, g: 0.70980394, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 34
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 0
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 1
+    m_LineSpacing: 1
+  m_Text: "\u5BD2\u51B0\u6C14\u606F"
+--- !u!1 &2604476859435101365
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2534349791647881055}
+  - component: {fileID: 8452826127380244719}
+  - component: {fileID: 4678849578644363807}
+  m_Layer: 5
+  m_Name: BuffIcon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2534349791647881055
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2604476859435101365}
+  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: 2515353736330966852}
+  - {fileID: 5826419887233570580}
+  - {fileID: 3580160415418532223}
+  - {fileID: 2515353736340248143}
+  - {fileID: 65437293693251250}
+  m_Father: {fileID: 0}
+  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: 0}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &8452826127380244719
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2604476859435101365}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 2515353736330966853}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 0}
+        m_TargetAssemblyTypeName: KTGMGemClient.SelectBuff, Assembly-CSharp
+        m_MethodName: OnClick
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!114 &4678849578644363807
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2604476859435101365}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a92c216c3d4e97459299f45fc451060, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  Icon: {fileID: 2515353736330966853}
+  BgMask: {fileID: 2566267208910760382}
+  Check: {fileID: 6037807312347287293}
+  Name: {fileID: 2515353736340248140}
+  Effect: {fileID: 7120449464389048921}
+  Index: 0
+--- !u!1 &4055937924103121589
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 65437293693251250}
+  - component: {fileID: 4695899768489853799}
+  - component: {fileID: 7120449464389048921}
+  m_Layer: 5
+  m_Name: Effect
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &65437293693251250
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4055937924103121589}
+  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: 2534349791647881055}
+  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}
+  m_AnchoredPosition: {x: 1, y: -210}
+  m_SizeDelta: {x: 300, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4695899768489853799
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4055937924103121589}
+  m_CullTransparentMesh: 0
+--- !u!114 &7120449464389048921
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4055937924103121589}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 0
+    m_MaxSize: 40
+    m_Alignment: 1
+    m_AlignByGeometry: 0
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 1
+    m_LineSpacing: 1
+  m_Text: "\u6C34\u7CBE\u7075\u51CF\u901F\u6548\u679C+10%"
+--- !u!1 &9100461940730660670
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5826419887233570580}
+  - component: {fileID: 3356571130069160499}
+  - component: {fileID: 2566267208910760382}
+  m_Layer: 5
+  m_Name: Mask
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5826419887233570580
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9100461940730660670}
+  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: 2534349791647881055}
+  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}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 250, y: 250}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3356571130069160499
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9100461940730660670}
+  m_CullTransparentMesh: 0
+--- !u!114 &2566267208910760382
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9100461940730660670}
+  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: 943b239aee2923444ad70adc346c69b5, 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
diff --git a/Assets/Prefabs/UI/BuffIcon.prefab.meta b/Assets/Prefabs/UI/BuffIcon.prefab.meta
new file mode 100644
index 0000000..3b34d71
--- /dev/null
+++ b/Assets/Prefabs/UI/BuffIcon.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e8b656b384ec06b47bb54c7fd04e1447
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/UI/PropIcon.prefab b/Assets/Prefabs/UI/PropIcon.prefab
new file mode 100644
index 0000000..2f04f94
--- /dev/null
+++ b/Assets/Prefabs/UI/PropIcon.prefab
@@ -0,0 +1,189 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &965724004192137757
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 9079844722132429016}
+  - component: {fileID: 6103026001546800385}
+  - component: {fileID: 4896144283322013574}
+  m_Layer: 5
+  m_Name: Bg
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &9079844722132429016
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 965724004192137757}
+  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: 6677654566162760697}
+  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: 0}
+  m_SizeDelta: {x: 134, y: 134}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6103026001546800385
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 965724004192137757}
+  m_CullTransparentMesh: 0
+--- !u!114 &4896144283322013574
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 965724004192137757}
+  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: 7452f72431e39024ea61c77c64dea0be, 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!1 &1730832437564531912
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6677654566162760697}
+  m_Layer: 5
+  m_Name: PropIcon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &6677654566162760697
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1730832437564531912}
+  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: 9079844722132429016}
+  - {fileID: 1096365539966205729}
+  m_Father: {fileID: 0}
+  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: -241, y: 179}
+  m_SizeDelta: {x: 134, y: 134}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &3381600331859814444
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1096365539966205729}
+  - component: {fileID: 1827184857845691517}
+  - component: {fileID: 3587367938846590477}
+  m_Layer: 5
+  m_Name: Icon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1096365539966205729
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3381600331859814444}
+  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: 6677654566162760697}
+  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}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 134, y: 134}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1827184857845691517
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3381600331859814444}
+  m_CullTransparentMesh: 0
+--- !u!114 &3587367938846590477
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3381600331859814444}
+  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: 38a3413ce7ebb794788cadf0b86b9a45, 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
diff --git a/Assets/Prefabs/UI/PropIcon.prefab.meta b/Assets/Prefabs/UI/PropIcon.prefab.meta
new file mode 100644
index 0000000..6d0ec3d
--- /dev/null
+++ b/Assets/Prefabs/UI/PropIcon.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 687aa9f504027364981b0ab60ced93ab
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/Levels/Battle/Endless.unity b/Assets/Scenes/Levels/Battle/Endless.unity
index 45e5bab..edce625 100644
--- a/Assets/Scenes/Levels/Battle/Endless.unity
+++ b/Assets/Scenes/Levels/Battle/Endless.unity
@@ -150,7 +150,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 11580651}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -20.78, y: 1.36, z: -7.44}
+  m_LocalPosition: {x: -19.7, y: 1.36, z: -7.44}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 1181846406}
@@ -244,6 +244,227 @@
   m_Father: {fileID: 1410659829}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &19764329
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 19764330}
+  - component: {fileID: 19764331}
+  - component: {fileID: 19764332}
+  - component: {fileID: 19764333}
+  m_Layer: 5
+  m_Name: Settlement
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &19764330
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 19764329}
+  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: 1967975860}
+  - {fileID: 541755971}
+  - {fileID: 895529421}
+  - {fileID: 2132913253}
+  - {fileID: 1346638857}
+  - {fileID: 1709580640}
+  - {fileID: 2864404443241069746}
+  - {fileID: 1005205636}
+  - {fileID: 313919141}
+  - {fileID: 1611993157}
+  - {fileID: 409658104}
+  - {fileID: 1834441187}
+  - {fileID: 1109607873}
+  - {fileID: 231274648}
+  - {fileID: 39084533}
+  - {fileID: 1846348240}
+  m_Father: {fileID: 849284131}
+  m_RootOrder: 8
+  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: 0}
+  m_SizeDelta: {x: 1080, y: 1920}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &19764331
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 19764329}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 1967975861}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 19764332}
+        m_TargetAssemblyTypeName: KTGMGemClient.EndlessSettlement, Assembly-CSharp
+        m_MethodName: ReturnToMainMenu
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!114 &19764332
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 19764329}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f2125c50d4929b84fa889da0a3054cc7, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  VictoryAudio: {fileID: 8300000, guid: c4256d7b0022a4e628edc3721077fe30, type: 3}
+  AudioSource: {fileID: 19764333}
+  menuSceneName: MainManuScene
+--- !u!82 &19764333
+AudioSource:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 19764329}
+  m_Enabled: 1
+  serializedVersion: 4
+  OutputAudioMixerGroup: {fileID: 243875498303300022, guid: c40bed98f23a748f89472abe9c1a6871,
+    type: 2}
+  m_audioClip: {fileID: 0}
+  m_PlayOnAwake: 1
+  m_Volume: 1
+  m_Pitch: 1
+  Loop: 0
+  Mute: 0
+  Spatialize: 0
+  SpatializePostEffects: 0
+  Priority: 128
+  DopplerLevel: 1
+  MinDistance: 1
+  MaxDistance: 500
+  Pan2D: 0
+  rolloffMode: 0
+  BypassEffects: 0
+  BypassListenerEffects: 0
+  BypassReverbZones: 0
+  rolloffCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 1
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    - serializedVersion: 3
+      time: 1
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  panLevelCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  spreadCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  reverbZoneMixCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 1
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
 --- !u!1 &31034480
 GameObject:
   m_ObjectHideFlags: 0
@@ -385,6 +606,131 @@
   m_Father: {fileID: 1681037444}
   m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &39084532
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (8)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -242
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -140
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &39084533 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 39084532}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &40635905
 GameObject:
   m_ObjectHideFlags: 0
@@ -502,7 +848,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 49423732}
   m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
-  m_LocalPosition: {x: -0, y: 1.36, z: 19.77}
+  m_LocalPosition: {x: 0.47000003, y: 1.36, z: 19.77}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -666,7 +1012,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 100631405}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -0.24, y: 1.36, z: -19.1}
+  m_LocalPosition: {x: 0.61, y: 1.36, z: -19.1}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 385100448}
@@ -757,7 +1103,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 107754323}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 9.74, y: 1.36, z: -7.44}
+  m_LocalPosition: {x: 10.86, y: 1.36, z: -7.44}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 122104236}
@@ -1201,7 +1547,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 167919691}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 20.54, y: 0.98, z: 3.67}
+  m_LocalPosition: {x: 20.36, y: 0.98, z: 3.67}
   m_LocalScale: {x: 0.79999995, y: 1, z: 3.3}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -1318,7 +1664,7 @@
   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: -14, y: 502}
+  m_AnchoredPosition: {x: 0, y: 690}
   m_SizeDelta: {x: 100, y: 100}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &181323910
@@ -1673,7 +2019,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 224247421}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -0.24, y: 1.36, z: -7.44}
+  m_LocalPosition: {x: 0.61, y: 1.36, z: -7.44}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 979083333}
@@ -1883,6 +2229,131 @@
     m_PreInfinity: 2
     m_PostInfinity: 2
     m_RotationOrder: 0
+--- !u!1001 &231274647
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (7)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 240
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &231274648 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 231274647}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &236991184
 GameObject:
   m_ObjectHideFlags: 0
@@ -2075,125 +2546,6 @@
       area: 0.05177676
     completeArea: 0.70710546
   outSidePointsParent: {fileID: 464175828}
---- !u!1 &252091368
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 252091369}
-  - component: {fileID: 252091371}
-  - component: {fileID: 252091370}
-  - component: {fileID: 252091373}
-  - component: {fileID: 252091372}
-  m_Layer: 5
-  m_Name: Image
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &252091369
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 252091368}
-  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: 306286610}
-  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}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 720, y: 1280}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &252091370
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 252091368}
-  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: 9e330147af7d42b4a9830e3f1a000013, 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 &252091371
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 252091368}
-  m_CullTransparentMesh: 0
---- !u!114 &252091372
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 252091368}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 77846cbd0fd353546b25fc2e0d6ad952, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  Index: 0
---- !u!114 &252091373
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 252091368}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Delegates:
-  - eventID: 4
-    callback:
-      m_PersistentCalls:
-        m_Calls:
-        - m_Target: {fileID: 252091372}
-          m_TargetAssemblyTypeName: KTGMGemClient.SelectBuff, Assembly-CSharp
-          m_MethodName: OnClick
-          m_Mode: 1
-          m_Arguments:
-            m_ObjectArgument: {fileID: 0}
-            m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
-            m_IntArgument: 0
-            m_FloatArgument: 0
-            m_StringArgument: 
-            m_BoolArgument: 0
-          m_CallState: 2
 --- !u!1 &261358297
 GameObject:
   m_ObjectHideFlags: 0
@@ -2312,7 +2664,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 284948256}
   m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
-  m_LocalPosition: {x: -10.5, y: 1.36, z: 19.7}
+  m_LocalPosition: {x: -9.47, y: 1.36, z: 19.7}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 1998565447}
@@ -2457,6 +2809,7 @@
   serializedVersion: 6
   m_Component:
   - component: {fileID: 306286610}
+  - component: {fileID: 306286611}
   m_Layer: 5
   m_Name: BuffSelect
   m_TagString: Untagged
@@ -2476,20 +2829,39 @@
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 1237349725}
-  - {fileID: 816083450}
-  - {fileID: 252091369}
-  - {fileID: 2034554597}
-  - {fileID: 2074714716}
-  - {fileID: 579893061}
-  - {fileID: 2016589806}
+  - {fileID: 2515353734583140523}
+  - {fileID: 671109414}
+  - {fileID: 767174507}
+  - {fileID: 1608463748}
   m_Father: {fileID: 849284131}
-  m_RootOrder: 5
+  m_RootOrder: 7
   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: 0}
   m_SizeDelta: {x: 100, y: 100}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &306286611
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 306286609}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 04afc9deff437494a9f503d7f59ccc83, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  Prompt: {fileID: 1608463749}
+  IconList:
+  - {fileID: 2515353734583140524}
+  - {fileID: 671109415}
+  - {fileID: 767174508}
+  SpriteList:
+  - {fileID: 21300000, guid: ce200e369ceee4c4aaca2de879512bc7, type: 3}
+  - {fileID: 21300000, guid: 92005d964d49f6c4f95aceec47db7c0b, type: 3}
+  - {fileID: 21300000, guid: 0c03b1cfd2f13f84f9e16ae5e3457369, type: 3}
 --- !u!1 &309006004
 GameObject:
   m_ObjectHideFlags: 0
@@ -2528,6 +2900,131 @@
   m_Father: {fileID: 1998565447}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!1001 &313919140
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (2)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 79
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 179
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &313919141 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 313919140}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &320444835
 GameObject:
   m_ObjectHideFlags: 0
@@ -2881,6 +3378,131 @@
   m_Father: {fileID: 1745145611}
   m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &409658103
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (4)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -242
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &409658104 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 409658103}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &423899723
 GameObject:
   m_ObjectHideFlags: 0
@@ -3128,7 +3750,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 469016880}
   m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
-  m_LocalPosition: {x: 9.74, y: 1.36, z: 19.7}
+  m_LocalPosition: {x: 10.86, y: 1.36, z: 19.7}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 819185222}
@@ -3294,7 +3916,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 476069900}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -10.5, y: 1.36, z: -19.1}
+  m_LocalPosition: {x: -9.47, y: 1.36, z: -19.1}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 1446344704}
@@ -3416,7 +4038,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 495435993}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -20.78, y: 0.9, z: 3.67}
+  m_LocalPosition: {x: -19.7, y: 0.9, z: 3.67}
   m_LocalScale: {x: 0.79999995, y: 1, z: 3.3}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -3497,6 +4119,81 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 495435993}
   m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &497387471
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 497387472}
+  - component: {fileID: 497387474}
+  - component: {fileID: 497387473}
+  m_Layer: 5
+  m_Name: Diamond
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &497387472
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 497387471}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+  m_Children: []
+  m_Father: {fileID: 1514665750}
+  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}
+  m_AnchoredPosition: {x: -58, y: -61}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &497387473
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 497387471}
+  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: 22253e4af58f9504ea78ba1dd24ff910, 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 &497387474
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 497387471}
+  m_CullTransparentMesh: 0
 --- !u!1 &508178146
 GameObject:
   m_ObjectHideFlags: 0
@@ -3659,7 +4356,7 @@
   m_GameObject: {fileID: 526512786}
   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_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
   m_Children:
   - {fileID: 1976804302}
   - {fileID: 471268011}
@@ -3668,7 +4365,7 @@
   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: -296, y: -570}
+  m_AnchoredPosition: {x: -419, y: -871}
   m_SizeDelta: {x: 180, y: 40}
   m_Pivot: {x: 0.5, y: 1}
 --- !u!114 &526512788
@@ -3752,6 +4449,118 @@
   m_Father: {fileID: 774627831}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &541755970
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 541755971}
+  - component: {fileID: 541755973}
+  - component: {fileID: 541755972}
+  m_Layer: 5
+  m_Name: VictoryTitle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &541755971
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 541755970}
+  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: 19764330}
+  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}
+  m_AnchoredPosition: {x: 0, y: 444}
+  m_SizeDelta: {x: 1080, y: 425}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &541755972
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 541755970}
+  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: 7390160d2fef08f4e81bf2d338786cbc, 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 &541755973
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 541755970}
+  m_CullTransparentMesh: 0
+--- !u!1 &559457821
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 559457822}
+  m_Layer: 5
+  m_Name: PropsObtained
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &559457822
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 559457821}
+  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: 909428572}
+  - {fileID: 1514665750}
+  m_Father: {fileID: 849284131}
+  m_RootOrder: 6
+  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: 290, y: -710}
+  m_SizeDelta: {x: 500, y: 500}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &567180756
 GameObject:
   m_ObjectHideFlags: 0
@@ -3969,7 +4778,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 570851794}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 9.74, y: 1.36, z: -19.1}
+  m_LocalPosition: {x: 10.86, y: 1.36, z: -19.1}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 241916071}
@@ -4063,85 +4872,6 @@
   m_Father: {fileID: 1435697235}
   m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &579893060
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 579893061}
-  - component: {fileID: 579893063}
-  - component: {fileID: 579893062}
-  m_Layer: 5
-  m_Name: BuffDesc2
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &579893061
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 579893060}
-  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: 306286610}
-  m_RootOrder: 5
-  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: 187, y: 38}
-  m_SizeDelta: {x: 160, y: 30}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &579893062
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 579893060}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
-    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 20
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 0
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: "\u5F02\u5E38\u4F24\u5BB3+5%"
---- !u!222 &579893063
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 579893060}
-  m_CullTransparentMesh: 0
 --- !u!1 &587345874
 GameObject:
   m_ObjectHideFlags: 0
@@ -4262,6 +4992,81 @@
   m_Father: {fileID: 464175828}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &603291501
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 603291502}
+  - component: {fileID: 603291504}
+  - component: {fileID: 603291503}
+  m_Layer: 5
+  m_Name: Treasure0
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &603291502
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 603291501}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.45, y: 0.45, z: 0.45}
+  m_Children: []
+  m_Father: {fileID: 1514665750}
+  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}
+  m_AnchoredPosition: {x: -57, y: 131}
+  m_SizeDelta: {x: 134, y: 134}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &603291503
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 603291501}
+  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: 38a3413ce7ebb794788cadf0b86b9a45, 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 &603291504
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 603291501}
+  m_CullTransparentMesh: 0
 --- !u!1 &603558970
 GameObject:
   m_ObjectHideFlags: 0
@@ -4320,7 +5125,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 618377762}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 9.74, y: 0.98, z: 3.67}
+  m_LocalPosition: {x: 10.35, y: 0.98, z: 3.67}
   m_LocalScale: {x: 0.79999995, y: 1, z: 3.3}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -4604,7 +5409,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 636678171}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -20.78, y: 1.36, z: -19.1}
+  m_LocalPosition: {x: -19.7, y: 1.36, z: -19.1}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 927514217}
@@ -4721,6 +5526,168 @@
   - {fileID: 11400000, guid: f37512567d055d24d8497779199dd5f4, type: 2}
   WaveLineId: 3
   StartingNode: {fileID: 928059878}
+--- !u!1001 &671109413
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 306286610}
+    m_Modifications:
+    - target: {fileID: 1037121612026682342, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: Index
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 128
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 250
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 250
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2604476859435101365, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Name
+      value: BuffIcon1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4678849578644363807, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: Index
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
+      value: 
+      objectReference: {fileID: 671109415}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
+      value: OnClick
+      objectReference: {fileID: 0}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
+      value: KTGMGemClient.SelectBuffIcon, Assembly-CSharp
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: e8b656b384ec06b47bb54c7fd04e1447, type: 3}
+--- !u!224 &671109414 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+    type: 3}
+  m_PrefabInstance: {fileID: 671109413}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &671109415 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 4678849578644363807, guid: e8b656b384ec06b47bb54c7fd04e1447,
+    type: 3}
+  m_PrefabInstance: {fileID: 671109413}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a92c216c3d4e97459299f45fc451060, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &675362862
 GameObject:
   m_ObjectHideFlags: 0
@@ -5006,6 +5973,168 @@
   m_Father: {fileID: 430648394}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &767174506
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 306286610}
+    m_Modifications:
+    - target: {fileID: 1037121612026682342, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: Index
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 327
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 128
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 250
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 250
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2604476859435101365, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Name
+      value: BuffIcon2
+      objectReference: {fileID: 0}
+    - target: {fileID: 4678849578644363807, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: Index
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
+      value: 
+      objectReference: {fileID: 767174508}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
+      value: OnClick
+      objectReference: {fileID: 0}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
+      value: KTGMGemClient.SelectBuffIcon, Assembly-CSharp
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: e8b656b384ec06b47bb54c7fd04e1447, type: 3}
+--- !u!224 &767174507 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+    type: 3}
+  m_PrefabInstance: {fileID: 767174506}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &767174508 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 4678849578644363807, guid: e8b656b384ec06b47bb54c7fd04e1447,
+    type: 3}
+  m_PrefabInstance: {fileID: 767174506}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a92c216c3d4e97459299f45fc451060, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &774627830
 GameObject:
   m_ObjectHideFlags: 0
@@ -5190,6 +6319,85 @@
     m_PreInfinity: 2
     m_PostInfinity: 2
     m_RotationOrder: 0
+--- !u!1 &795048837
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 795048838}
+  - component: {fileID: 795048840}
+  - component: {fileID: 795048839}
+  m_Layer: 5
+  m_Name: Text0
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &795048838
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 795048837}
+  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: 1514665750}
+  m_RootOrder: 5
+  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: 56, y: 130}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &795048839
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 795048837}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.1254902, g: 0.7019608, b: 0.1764706, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u521D\u7EA7\u5B9D\u7BB1\xD70"
+--- !u!222 &795048840
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 795048837}
+  m_CullTransparentMesh: 0
 --- !u!1 &798990854
 GameObject:
   m_ObjectHideFlags: 0
@@ -5218,7 +6426,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 798990854}
   m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
-  m_LocalPosition: {x: -20.78, y: 1.36, z: 19.7}
+  m_LocalPosition: {x: -19.7, y: 1.36, z: 19.7}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 236991185}
@@ -5312,85 +6520,6 @@
   m_Father: {fileID: 1410659829}
   m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &816083449
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 816083450}
-  - component: {fileID: 816083452}
-  - component: {fileID: 816083451}
-  m_Layer: 5
-  m_Name: Text
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &816083450
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 816083449}
-  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: 306286610}
-  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}
-  m_AnchoredPosition: {x: 0, y: 399}
-  m_SizeDelta: {x: 300.89, y: 80.6}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &816083451
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 816083449}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
-    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 50
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 5
-    m_MaxSize: 50
-    m_Alignment: 0
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
-    m_LineSpacing: 1
-  m_Text: "\u70B9\u51FB\u9009\u62E9buff"
---- !u!222 &816083452
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 816083449}
-  m_CullTransparentMesh: 0
 --- !u!1 &819185221
 GameObject:
   m_ObjectHideFlags: 0
@@ -5612,7 +6741,7 @@
   countDownTextNew: {fileID: 1172214032}
   timeTextNew: {fileID: 1945480920}
   timeStatic: {fileID: 1387193658}
-  SelectBuffUI: {fileID: 306286609}
+  SettlementUI: {fileID: 19764329}
   uiStartMssk: {fileID: 1730636811}
   bgMusic: {fileID: 0}
 --- !u!114 &849284128
@@ -5647,7 +6776,7 @@
   m_UiScaleMode: 1
   m_ReferencePixelsPerUnit: 100
   m_ScaleFactor: 1
-  m_ReferenceResolution: {x: 720, y: 1280}
+  m_ReferenceResolution: {x: 1080, y: 1920}
   m_ScreenMatchMode: 0
   m_MatchWidthOrHeight: 0
   m_PhysicalUnit: 3
@@ -5691,7 +6820,10 @@
   - {fileID: 526512787}
   - {fileID: 1747414114}
   - {fileID: 181323909}
+  - {fileID: 1570259601}
+  - {fileID: 559457822}
   - {fileID: 306286610}
+  - {fileID: 19764330}
   - {fileID: 1730636813}
   m_Father: {fileID: 0}
   m_RootOrder: 7
@@ -5731,6 +6863,81 @@
   m_Father: {fileID: 1681037444}
   m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &895529420
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 895529421}
+  - component: {fileID: 895529423}
+  - component: {fileID: 895529422}
+  m_Layer: 5
+  m_Name: Line
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &895529421
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 895529420}
+  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: 19764330}
+  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}
+  m_AnchoredPosition: {x: -229, y: 285}
+  m_SizeDelta: {x: 255, y: 18}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &895529422
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 895529420}
+  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: ecee35acaf781a44b8693efa471e9448, 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 &895529423
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 895529420}
+  m_CullTransparentMesh: 0
 --- !u!1 &902738588
 GameObject:
   m_ObjectHideFlags: 0
@@ -5758,7 +6965,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 902738588}
   m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
-  m_LocalPosition: {x: 9.74, y: 1.36, z: 19.77}
+  m_LocalPosition: {x: 10.35, y: 1.36, z: 19.77}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -5827,6 +7034,151 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 902738588}
   m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &909428571
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 909428572}
+  - component: {fileID: 909428575}
+  - component: {fileID: 909428574}
+  - component: {fileID: 909428573}
+  - component: {fileID: 909428576}
+  m_Layer: 5
+  m_Name: PropButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &909428572
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 909428571}
+  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: 559457822}
+  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: 166, y: -150}
+  m_SizeDelta: {x: 123, y: 122}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &909428573
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 909428571}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 909428574}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 909428576}
+        m_TargetAssemblyTypeName: KTGMGemClient.EndlessViewObtainedProps, Assembly-CSharp
+        m_MethodName: OnClick
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+--- !u!114 &909428574
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 909428571}
+  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: 44fe495ea32a0c846b67978ea2da1ebd, 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 &909428575
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 909428571}
+  m_CullTransparentMesh: 0
+--- !u!114 &909428576
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 909428571}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 499223bcef37be1429008117fbff70cd, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  RewardInfoUI: {fileID: 1514665749}
 --- !u!1 &918905599
 GameObject:
   m_ObjectHideFlags: 0
@@ -6047,7 +7399,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 928059874}
   m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
-  m_LocalPosition: {x: -0.24, y: 1.36, z: 19.7}
+  m_LocalPosition: {x: 0.61, y: 1.36, z: 19.7}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 1927819623}
@@ -6754,6 +8106,131 @@
   m_Father: {fileID: 464175828}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &1005205635
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (1)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -81
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 179
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &1005205636 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 1005205635}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &1011378015
 GameObject:
   m_ObjectHideFlags: 0
@@ -7468,6 +8945,85 @@
   m_Father: {fileID: 1446344704}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!1 &1083155067
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1083155068}
+  - component: {fileID: 1083155070}
+  - component: {fileID: 1083155069}
+  m_Layer: 5
+  m_Name: Text3
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1083155068
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1083155067}
+  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: 1514665750}
+  m_RootOrder: 8
+  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: 56, y: -64}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1083155069
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1083155067}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.68235296, g: 0.14117648, b: 0.972549, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u94BB\u77F3\xD70"
+--- !u!222 &1083155070
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1083155067}
+  m_CullTransparentMesh: 0
 --- !u!1 &1083890749
 GameObject:
   m_ObjectHideFlags: 0
@@ -7654,7 +9210,7 @@
   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: -310, y: -415}
+  m_AnchoredPosition: {x: -444.2, y: -415}
   m_SizeDelta: {x: 38, y: 32}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1093352502
@@ -7694,6 +9250,81 @@
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1093352500}
+  m_CullTransparentMesh: 0
+--- !u!1 &1097197702
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1097197703}
+  - component: {fileID: 1097197705}
+  - component: {fileID: 1097197704}
+  m_Layer: 5
+  m_Name: RewardBg
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1097197703
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1097197702}
+  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: 1514665750}
+  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: 26, y: 33}
+  m_SizeDelta: {x: 270, y: 320}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1097197704
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1097197702}
+  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: 119c114493179da4dabf446930c630cb, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1097197705
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1097197702}
   m_CullTransparentMesh: 0
 --- !u!1 &1099308089
 GameObject:
@@ -7976,6 +9607,131 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1108718554}
   m_CullTransparentMesh: 0
+--- !u!1001 &1109607872
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (6)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 78
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &1109607873 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 1109607872}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &1117905461
 GameObject:
   m_ObjectHideFlags: 0
@@ -8288,7 +10044,7 @@
   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: 45}
+  m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 300, y: 160}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &1172214031
@@ -8417,7 +10173,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1172845526}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -10.5, y: 0.98, z: 3.67}
+  m_LocalPosition: {x: -9.98, y: 0.98, z: 3.67}
   m_LocalScale: {x: 0.79999995, y: 1, z: 3.3}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -8639,6 +10395,81 @@
   m_Father: {fileID: 464175828}
   m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1210799404
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1210799405}
+  - component: {fileID: 1210799407}
+  - component: {fileID: 1210799406}
+  m_Layer: 5
+  m_Name: Treasure1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1210799405
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1210799404}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.45, y: 0.45, z: 0.45}
+  m_Children: []
+  m_Father: {fileID: 1514665750}
+  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}
+  m_AnchoredPosition: {x: -57, y: 69}
+  m_SizeDelta: {x: 134, y: 134}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1210799406
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1210799404}
+  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: a2afa197cdd7fda4eb0ca90287f7d882, 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 &1210799407
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1210799404}
+  m_CullTransparentMesh: 0
 --- !u!1 &1218207756
 GameObject:
   m_ObjectHideFlags: 0
@@ -8733,7 +10564,7 @@
   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: -310, y: -455}
+  m_AnchoredPosition: {x: -444.2, y: -455}
   m_SizeDelta: {x: 38, y: 32}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1225992029
@@ -8839,7 +10670,7 @@
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 720, y: 1280}
+  m_SizeDelta: {x: 1080, y: 1920}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1237349726
 MonoBehaviour:
@@ -9690,6 +11521,164 @@
   screenPanThreshold: 40
   mouseEdgePanSpeed: 30
   mouseRmbPanSpeed: 15
+--- !u!1 &1343237800
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1343237801}
+  - component: {fileID: 1343237803}
+  - component: {fileID: 1343237802}
+  m_Layer: 5
+  m_Name: Text2
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1343237801
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1343237800}
+  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: 1514665750}
+  m_RootOrder: 7
+  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: 56, y: -1}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1343237802
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1343237800}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.94509804, g: 0.46666667, b: 0.23529412, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u9AD8\u7EA7\u5B9D\u7BB1\xD70"
+--- !u!222 &1343237803
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1343237800}
+  m_CullTransparentMesh: 0
+--- !u!1 &1346638856
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1346638857}
+  - component: {fileID: 1346638859}
+  - component: {fileID: 1346638858}
+  m_Layer: 5
+  m_Name: FinalWave
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1346638857
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1346638856}
+  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: 19764330}
+  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}
+  m_AnchoredPosition: {x: 0, y: 285}
+  m_SizeDelta: {x: 300, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1346638858
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1346638856}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u6700\u7EC8\u6CE2\u6B21\uFF1A25"
+--- !u!222 &1346638859
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1346638856}
+  m_CullTransparentMesh: 0
 --- !u!1 &1376011634
 GameObject:
   m_ObjectHideFlags: 0
@@ -9717,7 +11706,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1376011634}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 20.54, y: 1.36, z: -19.1}
+  m_LocalPosition: {x: 20.87, y: 1.36, z: -19.1}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 2045276896}
@@ -9973,7 +11962,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1396658961}
   m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
-  m_LocalPosition: {x: -10.5, y: 1.36, z: 19.77}
+  m_LocalPosition: {x: -9.98, y: 1.36, z: 19.77}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -10275,6 +12264,85 @@
   m_Father: {fileID: 236991185}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!1 &1482631634
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1482631635}
+  - component: {fileID: 1482631637}
+  - component: {fileID: 1482631636}
+  m_Layer: 5
+  m_Name: Text1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1482631635
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1482631634}
+  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: 1514665750}
+  m_RootOrder: 6
+  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: 56, y: 64}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1482631636
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1482631634}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.23529412, g: 0.5019608, b: 0.94509804, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u4E2D\u7EA7\u5B9D\u7BB1\xD70"
+--- !u!222 &1482631637
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1482631634}
+  m_CullTransparentMesh: 0
 --- !u!1 &1486810256
 GameObject:
   m_ObjectHideFlags: 0
@@ -10287,7 +12355,7 @@
   - component: {fileID: 1486810259}
   - component: {fileID: 1486810258}
   m_Layer: 5
-  m_Name: hp2
+  m_Name: Hp2
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -10463,6 +12531,50 @@
   m_Father: {fileID: 98103728}
   m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1514665749
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1514665750}
+  m_Layer: 5
+  m_Name: RewardInfo
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1514665750
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1514665749}
+  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: 1097197703}
+  - {fileID: 603291502}
+  - {fileID: 1210799405}
+  - {fileID: 1816194827}
+  - {fileID: 497387472}
+  - {fileID: 795048838}
+  - {fileID: 1482631635}
+  - {fileID: 1343237801}
+  - {fileID: 1083155068}
+  m_Father: {fileID: 559457822}
+  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}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &1532824631
 GameObject:
   m_ObjectHideFlags: 0
@@ -10576,6 +12688,154 @@
   m_Father: {fileID: 208464362}
   m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1570259600
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1570259601}
+  - component: {fileID: 1570259603}
+  - component: {fileID: 1570259602}
+  - component: {fileID: 1570259605}
+  - component: {fileID: 1570259604}
+  m_Layer: 5
+  m_Name: SwitchSpeed
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1570259601
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1570259600}
+  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: 5
+  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: 459, y: -259}
+  m_SizeDelta: {x: 136, y: 70}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1570259602
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1570259600}
+  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: 708d963cbf006884d80f89ebe5511042, 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 &1570259603
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1570259600}
+  m_CullTransparentMesh: 0
+--- !u!114 &1570259604
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1570259600}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: be99b683351459b4f8806223396a05a8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  Icon: {fileID: 1570259602}
+  SpriteList:
+  - {fileID: 21300000, guid: 708d963cbf006884d80f89ebe5511042, type: 3}
+  - {fileID: 21300000, guid: ef3d2d4e6983a854686c14d97ac0d958, type: 3}
+--- !u!114 &1570259605
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1570259600}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 1570259602}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 1570259604}
+        m_TargetAssemblyTypeName: KTGMGemClient.EndlessSwitchSpeed, Assembly-CSharp
+        m_MethodName: OnClick
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
 --- !u!1 &1578069728
 GameObject:
   m_ObjectHideFlags: 0
@@ -10790,6 +13050,210 @@
   m_Father: {fileID: 1681037444}
   m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1608463747
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1608463748}
+  - component: {fileID: 1608463750}
+  - component: {fileID: 1608463749}
+  m_Layer: 5
+  m_Name: Prompt
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1608463748
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1608463747}
+  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: 306286610}
+  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}
+  m_AnchoredPosition: {x: 0, y: 362}
+  m_SizeDelta: {x: 500, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1608463749
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1608463747}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 50
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 3
+    m_MaxSize: 50
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u70B9\u51FB\u9009\u62E9buff"
+--- !u!222 &1608463750
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1608463747}
+  m_CullTransparentMesh: 0
+--- !u!1001 &1611993156
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (3)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 239
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 179
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &1611993157 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 1611993156}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &1618971293
 GameObject:
   m_ObjectHideFlags: 0
@@ -10818,7 +13282,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1618971293}
   m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
-  m_LocalPosition: {x: 20.54, y: 1.36, z: 19.7}
+  m_LocalPosition: {x: 20.87, y: 1.36, z: 19.7}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 1990433419}
@@ -10938,7 +13402,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1632078501}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: -25.8, y: 0, z: -28.8}
+  m_LocalPosition: {x: -25.39, y: 0, z: -28.8}
   m_LocalScale: {x: 9.25, y: 1, z: 9.22}
   m_Children: []
   m_Father: {fileID: 1765964312}
@@ -10964,12 +13428,12 @@
     type: 3}
   waitBuyBtnPrefab: {fileID: 1470395276146401766, guid: 9d592be254a1285438f8e78c5e1b1bc5,
     type: 3}
-  gridFreePos: 0.36
-  gridFreePos2: 0.19
+  gridFreePos: 0.35
+  gridFreePos2: 0.18
   dimensions:
     x: 5
     y: 4
-  gridSize: 1.11
+  gridSize: 1.109
 --- !u!65 &1632078504
 BoxCollider:
   m_ObjectHideFlags: 2
@@ -10981,8 +13445,8 @@
   m_IsTrigger: 0
   m_Enabled: 1
   serializedVersion: 2
-  m_Size: {x: 5.55, y: 0, z: 4.44}
-  m_Center: {x: 2.775, y: 0, z: 2.22}
+  m_Size: {x: 5.545, y: 0, z: 4.436}
+  m_Center: {x: 2.7725, y: 0, z: 2.218}
 --- !u!1 &1635411384
 GameObject:
   m_ObjectHideFlags: 0
@@ -11204,7 +13668,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1643240603}
   m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
-  m_LocalPosition: {x: 20.54, y: 1.36, z: 19.77}
+  m_LocalPosition: {x: 20.36, y: 1.36, z: 19.77}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -11312,7 +13776,7 @@
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 720, y: 1280}
+  m_SizeDelta: {x: 1080, y: 1920}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1646752540
 MonoBehaviour:
@@ -11592,6 +14056,85 @@
   m_Father: {fileID: 98103728}
   m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1709580639
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1709580640}
+  - component: {fileID: 1709580642}
+  - component: {fileID: 1709580641}
+  m_Layer: 5
+  m_Name: ContinueText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1709580640
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1709580639}
+  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: 19764330}
+  m_RootOrder: 5
+  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: -662}
+  m_SizeDelta: {x: 300, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1709580641
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1709580639}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u70B9\u51FB\u5C4F\u5E55\u7EE7\u7EED"
+--- !u!222 &1709580642
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1709580639}
+  m_CullTransparentMesh: 0
 --- !u!1 &1711417025
 GameObject:
   m_ObjectHideFlags: 0
@@ -11896,12 +14439,12 @@
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 849284131}
-  m_RootOrder: 6
+  m_RootOrder: 9
   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: 0}
-  m_SizeDelta: {x: 720, y: 1280}
+  m_SizeDelta: {x: 1080, y: 1920}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &1745145610
 GameObject:
@@ -12241,7 +14784,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1776140741}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 20.54, y: 1.36, z: -7.44}
+  m_LocalPosition: {x: 20.87, y: 1.36, z: -7.44}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 923108228}
@@ -12482,7 +15025,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1813750110}
   m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
-  m_LocalPosition: {x: -20.78, y: 1.36, z: 19.77}
+  m_LocalPosition: {x: -19.61, y: 1.36, z: 19.77}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -12551,6 +15094,81 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1813750110}
   m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1816194826
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1816194827}
+  - component: {fileID: 1816194829}
+  - component: {fileID: 1816194828}
+  m_Layer: 5
+  m_Name: Treasure2
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1816194827
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1816194826}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.4, y: 0.4, z: 0.4}
+  m_Children: []
+  m_Father: {fileID: 1514665750}
+  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}
+  m_AnchoredPosition: {x: -57, y: 4}
+  m_SizeDelta: {x: 134, y: 134}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1816194828
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1816194826}
+  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: 794b94296261e8f4ca1481e698f9d8f0, 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 &1816194829
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1816194826}
+  m_CullTransparentMesh: 0
 --- !u!1 &1821575048
 GameObject:
   m_ObjectHideFlags: 0
@@ -12581,6 +15199,131 @@
   m_Father: {fileID: 774627831}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &1834441186
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (5)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -80
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &1834441187 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 1834441186}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &1845482060
 GameObject:
   m_ObjectHideFlags: 0
@@ -12611,6 +15354,131 @@
   m_Father: {fileID: 1410659829}
   m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1001 &1846348239
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon (9)
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -82
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: -140
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &1846348240 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 1846348239}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &1861603046
 GameObject:
   m_ObjectHideFlags: 0
@@ -12758,7 +15626,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1899887982}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: -10.5, y: 1.36, z: -7.44}
+  m_LocalPosition: {x: -9.47, y: 1.36, z: -7.44}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 32178955}
@@ -13479,7 +16347,7 @@
   m_GameObject: {fileID: 1953656505}
   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_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
   m_Children:
   - {fileID: 508178147}
   - {fileID: 1070264758}
@@ -13488,7 +16356,7 @@
   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: -580}
+  m_AnchoredPosition: {x: -3, y: -862}
   m_SizeDelta: {x: 252, y: 98}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1953656507
@@ -13664,7 +16532,7 @@
   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: -310, y: -495}
+  m_AnchoredPosition: {x: -444.2, y: -495}
   m_SizeDelta: {x: 38, y: 32}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1967754588
@@ -13704,6 +16572,81 @@
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1967754586}
+  m_CullTransparentMesh: 0
+--- !u!1 &1967975859
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1967975860}
+  - component: {fileID: 1967975862}
+  - component: {fileID: 1967975861}
+  m_Layer: 5
+  m_Name: BgMask
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1967975860
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1967975859}
+  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: 19764330}
+  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: 0}
+  m_SizeDelta: {x: 1080, y: 1920}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1967975861
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1967975859}
+  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: e956ec24a18e6674b8987899c8901174, 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 &1967975862
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1967975859}
   m_CullTransparentMesh: 0
 --- !u!1 &1976804301
 GameObject:
@@ -13868,7 +16811,7 @@
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1977355534}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0.98, z: 3.67}
+  m_LocalPosition: {x: 0.47000003, y: 0.98, z: 3.67}
   m_LocalScale: {x: 0.79999995, y: 1, z: 3.3}
   m_Children: []
   m_Father: {fileID: 304173789}
@@ -14265,7 +17208,7 @@
   m_GameObject: {fileID: 1992794822}
   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_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
   m_Children:
   - {fileID: 1945480922}
   m_Father: {fileID: 1747414114}
@@ -14273,7 +17216,7 @@
   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: 310, y: 154}
+  m_AnchoredPosition: {x: 458, y: 236}
   m_SizeDelta: {x: 88, y: 58}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &1992794824
@@ -14425,81 +17368,6 @@
   m_Father: {fileID: 1466089839}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &2016589805
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 2016589806}
-  - component: {fileID: 2016589808}
-  - component: {fileID: 2016589807}
-  m_Layer: 5
-  m_Name: Image
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &2016589806
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2016589805}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 52.56}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_Children: []
-  m_Father: {fileID: 306286610}
-  m_RootOrder: 6
-  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: -161, y: -172}
-  m_SizeDelta: {x: 100, y: 100}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &2016589807
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2016589805}
-  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: ce200e369ceee4c4aaca2de879512bc7, 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 &2016589808
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2016589805}
-  m_CullTransparentMesh: 0
 --- !u!1 &2018261564
 GameObject:
   m_ObjectHideFlags: 0
@@ -14530,85 +17398,6 @@
   m_Father: {fileID: 1469141976}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &2034554596
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 2034554597}
-  - component: {fileID: 2034554599}
-  - component: {fileID: 2034554598}
-  m_Layer: 5
-  m_Name: BuffDesc0
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &2034554597
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2034554596}
-  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: 306286610}
-  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}
-  m_AnchoredPosition: {x: -165, y: 38}
-  m_SizeDelta: {x: 160, y: 30}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &2034554598
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2034554596}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
-    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 20
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 0
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: "\u6240\u6709\u7CBE\u7075\u653B\u51FB+5"
---- !u!222 &2034554599
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2034554596}
-  m_CullTransparentMesh: 0
 --- !u!1 &2036016637
 GameObject:
   m_ObjectHideFlags: 0
@@ -14746,7 +17535,7 @@
   - component: {fileID: 2044565607}
   - component: {fileID: 2044565606}
   m_Layer: 5
-  m_Name: hp1
+  m_Name: Hp1
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -15174,85 +17963,6 @@
   m_Father: {fileID: 1745145611}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &2074714715
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 2074714716}
-  - component: {fileID: 2074714718}
-  - component: {fileID: 2074714717}
-  m_Layer: 5
-  m_Name: BuffDesc1
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &2074714716
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2074714715}
-  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: 306286610}
-  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}
-  m_AnchoredPosition: {x: 8, y: 38}
-  m_SizeDelta: {x: 160, y: 30}
-  m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &2074714717
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2074714715}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData:
-    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 20
-    m_FontStyle: 0
-    m_BestFit: 0
-    m_MinSize: 2
-    m_MaxSize: 40
-    m_Alignment: 0
-    m_AlignByGeometry: 0
-    m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 1
-    m_LineSpacing: 1
-  m_Text: "\u6C34\u7CBE\u7075\u51CF\u901F\u6548\u679C+10%"
---- !u!222 &2074714718
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 2074714715}
-  m_CullTransparentMesh: 0
 --- !u!1 &2076014241
 GameObject:
   m_ObjectHideFlags: 0
@@ -15635,3 +18345,355 @@
     m_PreInfinity: 2
     m_PostInfinity: 2
     m_RotationOrder: 0
+--- !u!1 &2132913252
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2132913253}
+  - component: {fileID: 2132913255}
+  - component: {fileID: 2132913254}
+  m_Layer: 5
+  m_Name: Line2
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2132913253
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2132913252}
+  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: 19764330}
+  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}
+  m_AnchoredPosition: {x: 228, y: 285}
+  m_SizeDelta: {x: 255, y: 18}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2132913254
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2132913252}
+  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: ecee35acaf781a44b8693efa471e9448, 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 &2132913255
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2132913252}
+  m_CullTransparentMesh: 0
+--- !u!1001 &2515353734583140522
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 306286610}
+    m_Modifications:
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -324
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 128
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 250
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 250
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2604476859435101365, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_Name
+      value: BuffIcon
+      objectReference: {fileID: 0}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
+      value: 
+      objectReference: {fileID: 2515353734583140524}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
+      value: OnClick
+      objectReference: {fileID: 0}
+    - target: {fileID: 8452826127380244719, guid: e8b656b384ec06b47bb54c7fd04e1447,
+        type: 3}
+      propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
+      value: KTGMGemClient.SelectBuffIcon, Assembly-CSharp
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: e8b656b384ec06b47bb54c7fd04e1447, type: 3}
+--- !u!224 &2515353734583140523 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2534349791647881055, guid: e8b656b384ec06b47bb54c7fd04e1447,
+    type: 3}
+  m_PrefabInstance: {fileID: 2515353734583140522}
+  m_PrefabAsset: {fileID: 0}
+--- !u!114 &2515353734583140524 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 4678849578644363807, guid: e8b656b384ec06b47bb54c7fd04e1447,
+    type: 3}
+  m_PrefabInstance: {fileID: 2515353734583140522}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9a92c216c3d4e97459299f45fc451060, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1001 &2864404443241069745
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 19764330}
+    m_Modifications:
+    - target: {fileID: 1730832437564531912, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Name
+      value: PropIcon
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -241
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 179
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 134
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+        type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 687aa9f504027364981b0ab60ced93ab, type: 3}
+--- !u!224 &2864404443241069746 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 6677654566162760697, guid: 687aa9f504027364981b0ab60ced93ab,
+    type: 3}
+  m_PrefabInstance: {fileID: 2864404443241069745}
+  m_PrefabAsset: {fileID: 0}
diff --git a/Assets/Scenes/Levels/Battle/GemBattle.unity b/Assets/Scenes/Levels/Battle/GemBattle.unity
index 96d5ef0..f2b5e5e 100644
--- a/Assets/Scenes/Levels/Battle/GemBattle.unity
+++ b/Assets/Scenes/Levels/Battle/GemBattle.unity
@@ -1653,7 +1653,7 @@
   - {fileID: 1776264327}
   - {fileID: 512550108}
   m_Father: {fileID: 925045745}
-  m_RootOrder: 4
+  m_RootOrder: 9
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -4579,7 +4579,7 @@
   m_Children:
   - {fileID: 1172682253}
   m_Father: {fileID: 925045745}
-  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}
@@ -4964,7 +4964,7 @@
   - {fileID: 1457595363}
   - {fileID: 1810904458}
   m_Father: {fileID: 925045745}
-  m_RootOrder: 8
+  m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -5901,7 +5901,7 @@
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 925045745}
-  m_RootOrder: 9
+  m_RootOrder: 8
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -8245,12 +8245,14 @@
   m_Children:
   - {fileID: 992080607}
   - {fileID: 783401285}
-  - {fileID: 157945768}
+  - {fileID: 441929933}
+  - {fileID: 998930542}
   - {fileID: 996808778}
   - {fileID: 1571374742}
   - {fileID: 1622783961}
   - {fileID: 508973503}
   - {fileID: 624594681}
+  - {fileID: 157945768}
   m_Father: {fileID: 0}
   m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -8984,7 +8986,7 @@
   m_Children:
   - {fileID: 851418740}
   m_Father: {fileID: 925045745}
-  m_RootOrder: 5
+  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}
@@ -9060,7 +9062,7 @@
   m_Children:
   - {fileID: 1474713017}
   m_Father: {fileID: 925045745}
-  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}
@@ -13212,7 +13214,7 @@
   m_Children:
   - {fileID: 114205549}
   m_Father: {fileID: 925045745}
-  m_RootOrder: 6
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -13856,7 +13858,7 @@
   - {fileID: 1006785496}
   - {fileID: 2029757850}
   m_Father: {fileID: 925045745}
-  m_RootOrder: 7
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
diff --git a/Assets/Scripts/Data/EndlessBuffData.cs b/Assets/Scripts/Data/EndlessBuffData.cs
index 91055e5..6797b05 100644
--- a/Assets/Scripts/Data/EndlessBuffData.cs
+++ b/Assets/Scripts/Data/EndlessBuffData.cs
@@ -68,6 +68,19 @@
         /// </summary>
         private static List<EndlessBuffConfig> randomBuffList;
 
+        /// <summary>
+        /// 颜色品阶
+        /// </summary>
+        /// <typeparam name="Color"></typeparam>
+        /// <returns></returns>
+        private static List<Color> rareColorList = new List<Color>()
+        {
+            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()
         {
             endlessBuffList = JsonDataCenter.GetList<endless_buff>();
@@ -163,5 +176,15 @@
         {
             return randomBuffList[index];
         }
+
+        /// <summary>
+        /// 根据品质获得颜色值
+        /// </summary>
+        /// <param name="rare"></param>
+        /// <returns></returns>
+        public static Color GetColorByRare(int rare)
+        {
+            return rareColorList[rare - 1];
+        }
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Data/EndlessPortData.cs b/Assets/Scripts/Data/EndlessPortData.cs
index c218560..92cd2b0 100644
--- a/Assets/Scripts/Data/EndlessPortData.cs
+++ b/Assets/Scripts/Data/EndlessPortData.cs
@@ -84,17 +84,27 @@
         {
             List<List<EndlessPortConfig>> ret = new List<List<EndlessPortConfig>>();
 
+            for (int i = 0; i < 5; ++i)
+            {
+                ret.Add(new List<EndlessPortConfig>());
+            }
+
             foreach (EndlessPortConfig data in portConfigList)
             {
-                if (data.Config.level != level || data.Config.amount == 0 || data.Config.tunel != 3)
-                    continue;
-
-                if (data.Config.wave > ret.Count)
-                    ret.Add(new List<EndlessPortConfig>());
+                if (data.Config.level != level || data.Config.amount == 0) continue;
 
                 ret[data.Config.wave - 1].Add(data);
             }
 
+            for (int i = 0; i < ret.Count; ++i)
+            {
+                if (ret[i].Count == 0)
+                {
+                    ret.Remove(ret[i]);
+                    --i;
+                }
+            }
+
             return ret;
         }
 
diff --git a/Assets/Scripts/Enum/EndlessBuffSelectState.cs b/Assets/Scripts/Enum/EndlessBuffSelectState.cs
new file mode 100644
index 0000000..838d72e
--- /dev/null
+++ b/Assets/Scripts/Enum/EndlessBuffSelectState.cs
@@ -0,0 +1,19 @@
+/**
+ * 无尽模式buff选择状态
+ * @Author: chenxin
+ * @Date: 2020-10-19 15:39:42
+ */
+namespace KTGMGemClient
+{
+    public enum EndlessBuffSelectState
+    {
+        // 未选择
+        Normal,
+
+        // 已选择,未选中
+        Unselected,
+
+        // 已选中
+        Selected
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta b/Assets/Scripts/Enum/EndlessBuffSelectState.cs.meta
similarity index 83%
copy from Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
copy to Assets/Scripts/Enum/EndlessBuffSelectState.cs.meta
index 906d708..92b0f01 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
+++ b/Assets/Scripts/Enum/EndlessBuffSelectState.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 77846cbd0fd353546b25fc2e0d6ad952
+guid: 2c84e7dc1c95f754180e7ce300d5a81c
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/Json/JsonDataCenter.cs b/Assets/Scripts/Json/JsonDataCenter.cs
index e077935..6fc8189 100644
--- a/Assets/Scripts/Json/JsonDataCenter.cs
+++ b/Assets/Scripts/Json/JsonDataCenter.cs
@@ -177,7 +177,7 @@
                             OpponentMgr.instance.ResetCurrency(currency);
 
                         if (EndlessLevelManager.instanceExists)
-                            EndlessLevelManager.instance.ResetCurrency(5000);
+                            EndlessLevelManager.instance.ResetCurrency(currency);
                         break;
                     case "skilltime":
                         // 设置技能塔出现时间
diff --git a/Assets/Scripts/Net/NetExtends/Common.cs b/Assets/Scripts/Net/NetExtends/Common.cs
index 6c34f3d..8dfe14e 100644
--- a/Assets/Scripts/Net/NetExtends/Common.cs
+++ b/Assets/Scripts/Net/NetExtends/Common.cs
@@ -23,7 +23,7 @@
       byte[] descriptorData = global::System.Convert.FromBase64String(
           string.Concat(
             "Cgxjb21tb24ucHJvdG8SCHByb3RvYnVmIjUKBkdlbU1zZxINCgVnZW1JZBgB",
-            "IAEoBRINCgVsZXZlbBgCIAEoBRINCgVjb3VudBgDIAEoBSL4AgoLVXNlckRh",
+            "IAEoBRINCgVsZXZlbBgCIAEoBRINCgVjb3VudBgDIAEoBSKtAwoLVXNlckRh",
             "dGFNc2cSEAoIdXNlcm5hbWUYASABKAkSEAoIbmlja25hbWUYAiABKAkSDwoH",
             "aGVhZGltZxgDIAEoBRIRCglzaW5nYXR1cmUYBCABKAkSDQoFbGV2ZWwYBSAB",
             "KAUSDAoEcmFuaxgGIAEoBRINCgVzY29yZRgHIAEoBRILCgNleHAYCCABKAUS",
@@ -32,44 +32,76 @@
             "GA0gAygFEhAKCGdlbWRlY2szGA4gAygFEg4KBmRlY2tpZBgPIAEoBRIUCgxh",
             "Y2NlcHRmcmllbmQYECABKAgSFAoMbmFtZWRjaGFuZ2VkGBEgASgIEg8KB2Fy",
             "ZWFleHAYEiABKAUSKAoJYXJlYWJveGVzGBMgAygLMhUucHJvdG9idWYuQXJl",
-            "bmFCb3hNc2cinwEKCUZyaWVuZE1zZxIQCgh1c2VybmFtZRgBIAEoCRIQCghu",
-            "aWNrbmFtZRgCIAEoCRIPCgdoZWFkaW1nGAMgASgFEg0KBWxldmVsGAUgASgF",
-            "EgwKBHJhbmsYBiABKAUSDQoFc2NvcmUYByABKAUSDgoGb25saW5lGAggASgI",
-            "EiEKB2dlbWRlY2sYCSADKAsyEC5wcm90b2J1Zi5HZW1Nc2ciVgoMU3RvcmVB",
-            "cmVhTXNnEgoKAmlkGAEgASgFEhMKC3JlZnJlc2hUaW1lGAIgASgFEiUKBWl0",
-            "ZW1zGAMgAygLMhYucHJvdG9idWYuU3RvcmVJdGVtTXNnIiwKDFN0b3JlSXRl",
-            "bU1zZxIKCgJpZBgBIAEoBRIQCghidXlDb3VudBgCIAEoBSI4Cg1SZXdhcmRJ",
-            "dGVtTXNnEgwKBHR5cGUYASABKAUSCgoCaWQYAiABKAUSDQoFY291bnQYAyAB",
-            "KAUiPQoLQXJlbmFCb3hNc2cSCwoDcG9zGAEgASgFEg0KBWJveGlkGAIgASgF",
-            "EhIKCmV4cGlyZVRpbWUYAyABKAUqXAoIQ1VSUkVOQ1kSEgoOQ1VSUkVOQ1lf",
-            "QkVHSU4QABIJCgVNT05FWRABEggKBEdPTEQQAhIHCgNSTUIQAxIHCgNHRU0Q",
-            "BBIHCgNCT1gQBRIMCghBUkVOQUVYUBAGKiYKCUNoYW5uZWxJRBIRCg1DSEFO",
-            "TkVMX0JFR0lOEAASBgoCR00QASqNBQoJRXJyb3JDb2RlEgsKB1N1Y2Nlc3MQ",
-            "ABIVChFDaGFubmVsSWRfTm9FeGlzdBABEhQKEFVzZXJOYW1lX0ludmFsaWQQ",
-            "AhIYChRVc2VyUGFzc1dvcmRfSW52YWxpZBADEhAKDFVua25vd19FcnJvchAE",
-            "EhEKDUlucHV0X0ludmFsaWQQBRILCgdUaW1lb3V0EAYSFgoSU2Vzc2lvbktl",
-            "eV9JbnZhbGlkEAcSEAoMTG9naW5fTm9Vc2VyEAgSEwoPTm90RW5vdWdoX01v",
-            "bmV5EAkSEgoOTm90RW5vdWdoX0dvbGQQChIRCg1Ob3RFbm91Z2hfR2VtEAsS",
-            "EwoPTm90Rm91bmRfRnJpZW5kEAwSEgoOQWxyZWFkeV9GcmllbmQQDRISCg5J",
-            "bkJsb2NrX0ZyaWVuZBAOEg4KCk1heF9GcmllbmQQDxIQCgxNYXhfTmlja05h",
-            "bWUQEBIUChBJbnZhbGlkX05pY2tOYW1lEBESEgoOTWF4X1N0b3JlTGltaXQQ",
-            "EhIWChJOb3RFbm91Z2hfU3RvcmVCdXkQExIUChBOb3RPcGVuX1Bhc3NQb3J0",
-            "EBQSFAoQQWxyZWFkeV9QYXNzUG9ydBAVEhwKGE5lZWRWaXBfUGFzc1BvcnRU",
-            "YWtlSXRlbRAWEh4KGk5lZWRMZXZlbF9QYXNzUG9ydFRha2VJdGVtEBcSHAoY",
-            "QWxyZWFkeV9QYXNzUG9ydFRha2VJdGVtEBgSHAoYSW52YWxpZF9QYXNzUG9y",
-            "dEJ1eUxldmVsEBkSFgoSSGFzVW5sb2NrX0FyZW5hQm94EBoSGwoXT3RoZXJV",
-            "bmxvY2tpbmdfQXJlbmFCb3gQGxIYChROb3RUaW1lVGFrZV9BcmVuYUJveBAc",
-            "YgZwcm90bzM="));
+            "bmFCb3hNc2cSIwoGZmFtaWx5GBQgASgLMhMucHJvdG9idWYuRmFtaWx5TXNn",
+            "Eg4KBmRvbmF0ZRgVIAEoBSKfAQoJRnJpZW5kTXNnEhAKCHVzZXJuYW1lGAEg",
+            "ASgJEhAKCG5pY2tuYW1lGAIgASgJEg8KB2hlYWRpbWcYAyABKAUSDQoFbGV2",
+            "ZWwYBSABKAUSDAoEcmFuaxgGIAEoBRINCgVzY29yZRgHIAEoBRIOCgZvbmxp",
+            "bmUYCCABKAgSIQoHZ2VtZGVjaxgJIAMoCzIQLnByb3RvYnVmLkdlbU1zZyJW",
+            "CgxTdG9yZUFyZWFNc2cSCgoCaWQYASABKAUSEwoLcmVmcmVzaFRpbWUYAiAB",
+            "KAUSJQoFaXRlbXMYAyADKAsyFi5wcm90b2J1Zi5TdG9yZUl0ZW1Nc2ciLAoM",
+            "U3RvcmVJdGVtTXNnEgoKAmlkGAEgASgFEhAKCGJ1eUNvdW50GAIgASgFIjgK",
+            "DVJld2FyZEl0ZW1Nc2cSDAoEdHlwZRgBIAEoBRIKCgJpZBgCIAEoBRINCgVj",
+            "b3VudBgDIAEoBSI9CgtBcmVuYUJveE1zZxILCgNwb3MYASABKAUSDQoFYm94",
+            "aWQYAiABKAUSEgoKZXhwaXJlVGltZRgDIAEoBSKvAQoPRmFtaWx5TWVtYmVy",
+            "TXNnEhAKCHVzZXJuYW1lGAEgASgJEhAKCG5pY2tuYW1lGAIgASgJEg8KB2hl",
+            "YWRpbWcYAyABKAUSEAoIcG9zaXRpb24YBCABKAUSDgoGb25saW5lGAUgASgI",
+            "Eg0KBXNjb3JlGAYgASgFEg0KBWxldmVsGAcgASgFEhIKCndlZWtEb25hdGUY",
+            "CCABKAUSEwoLdG90YWxEb25hdGUYCSABKAUiPAoTRmFtaWx5RG9uYXRlSXRl",
+            "bU1zZxIQCgh1c2VybmFtZRgBIAEoCRITCgtkb25hdGVDb3VudBgCIAEoBSKS",
+            "AwoNRmFtaWx5Q2hhdE1zZxIRCgltZXNzYWdlSWQYASABKAUSEAoIdXNlcm5h",
+            "bWUYAiABKAkSEAoIbmlja25hbWUYAyABKAkSDwoHaGVhZGltZxgEIAEoBRIS",
+            "CgpjcmVhdGVUaW1lGAUgASgFEg8KB2NvbnRlbnQYBiABKAkSJAoIY2hhdFR5",
+            "cGUYByABKA4yEi5wcm90b2J1Zi5DaGF0VHlwZRINCgVnZW1JZBgIIAEoBRIx",
+            "Cgpkb25hdGVsaXN0GAkgAygLMh0ucHJvdG9idWYuRmFtaWx5RG9uYXRlSXRl",
+            "bU1zZxIUCgxyZWNlaXZlQ291bnQYCiABKAUSEgoKVG90YWxDb3VudBgLIAEo",
+            "BRIQCghub3RpY2VJZBgMIAEoBRIOCgZwYXJhbXMYDSADKAkSEwoLbmV3VXNl",
+            "cm5hbWUYDiABKAkSEwoLbmV3Tmlja25hbWUYDyABKAkSEgoKbmV3SGVhZGlt",
+            "ZxgQIAEoBRIQCghuZXdMZXZlbBgRIAEoBRIQCghuZXdTY29yZRgSIAEoBSLS",
+            "AQoJRmFtaWx5TXNnEgsKA3VpZBgBIAEoCRIMCgRuYW1lGAIgASgJEgwKBGRl",
+            "c2MYAyABKAkSDQoFaWNvbnMYBCADKAUSDQoFc2NvcmUYBSABKAUSEwoLc2Nv",
+            "cmVzaG9wSWQYBiABKAUSGAoQc2NvcmVzaG9wRXhwaXJlZBgHIAEoBRIQCghm",
+            "cmVlSm9pbhgIIAEoBRIRCgluZWVkU2NvcmUYCSABKAUSKgoHbWVtYmVycxgK",
+            "IAMoCzIZLnByb3RvYnVmLkZhbWlseU1lbWJlck1zZyKoAQoTRmFtaWx5U2Vh",
+            "cmNoSXRlbU1zZxILCgN1aWQYASABKAkSDAoEbmFtZRgCIAEoCRIMCgRkZXNj",
+            "GAMgASgJEg0KBWljb25zGAQgAygFEhMKC21lbWJlckNvdW50GAUgASgFEhAK",
+            "CGlzQWN0aXZlGAYgASgIEhIKCmlzRnJpZW5kSW4YByABKAgSDQoFaXNOZXcY",
+            "CCABKAgSDwoHaXNBcHBseRgJIAEoCCpoCghDVVJSRU5DWRISCg5DVVJSRU5D",
+            "WV9CRUdJThAAEgkKBU1PTkVZEAESCAoER09MRBACEgcKA1JNQhADEgcKA0dF",
+            "TRAEEgcKA0JPWBAFEgwKCEFSRU5BRVhQEAYSCgoGRE9OQVRFEAcqJgoJQ2hh",
+            "bm5lbElEEhEKDUNIQU5ORUxfQkVHSU4QABIGCgJHTRABKo0FCglFcnJvckNv",
+            "ZGUSCwoHU3VjY2VzcxAAEhUKEUNoYW5uZWxJZF9Ob0V4aXN0EAESFAoQVXNl",
+            "ck5hbWVfSW52YWxpZBACEhgKFFVzZXJQYXNzV29yZF9JbnZhbGlkEAMSEAoM",
+            "VW5rbm93X0Vycm9yEAQSEQoNSW5wdXRfSW52YWxpZBAFEgsKB1RpbWVvdXQQ",
+            "BhIWChJTZXNzaW9uS2V5X0ludmFsaWQQBxIQCgxMb2dpbl9Ob1VzZXIQCBIT",
+            "Cg9Ob3RFbm91Z2hfTW9uZXkQCRISCg5Ob3RFbm91Z2hfR29sZBAKEhEKDU5v",
+            "dEVub3VnaF9HZW0QCxITCg9Ob3RGb3VuZF9GcmllbmQQDBISCg5BbHJlYWR5",
+            "X0ZyaWVuZBANEhIKDkluQmxvY2tfRnJpZW5kEA4SDgoKTWF4X0ZyaWVuZBAP",
+            "EhAKDE1heF9OaWNrTmFtZRAQEhQKEEludmFsaWRfTmlja05hbWUQERISCg5N",
+            "YXhfU3RvcmVMaW1pdBASEhYKEk5vdEVub3VnaF9TdG9yZUJ1eRATEhQKEE5v",
+            "dE9wZW5fUGFzc1BvcnQQFBIUChBBbHJlYWR5X1Bhc3NQb3J0EBUSHAoYTmVl",
+            "ZFZpcF9QYXNzUG9ydFRha2VJdGVtEBYSHgoaTmVlZExldmVsX1Bhc3NQb3J0",
+            "VGFrZUl0ZW0QFxIcChhBbHJlYWR5X1Bhc3NQb3J0VGFrZUl0ZW0QGBIcChhJ",
+            "bnZhbGlkX1Bhc3NQb3J0QnV5TGV2ZWwQGRIWChJIYXNVbmxvY2tfQXJlbmFC",
+            "b3gQGhIbChdPdGhlclVubG9ja2luZ19BcmVuYUJveBAbEhgKFE5vdFRpbWVU",
+            "YWtlX0FyZW5hQm94EBwqcQoIQ2hhdFR5cGUSEgoOQ2hhdFR5cGVfQmVnaW4Q",
+            "ABIRCg1DaGF0VHlwZV9UZXh0EAESFgoSQ2hhdFR5cGVfRG9uYXRlR2VtEAIS",
+            "EwoPQ2hhdFR5cGVfU3lzdGVtEAMSEQoNQ2hhdFR5cGVfSm9pbhAEYgZwcm90",
+            "bzM="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
-          new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Protobuf.CURRENCY), typeof(global::Protobuf.ChannelID), typeof(global::Protobuf.ErrorCode), }, new pbr::GeneratedClrTypeInfo[] {
+          new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Protobuf.CURRENCY), typeof(global::Protobuf.ChannelID), typeof(global::Protobuf.ErrorCode), typeof(global::Protobuf.ChatType), }, new pbr::GeneratedClrTypeInfo[] {
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.GemMsg), global::Protobuf.GemMsg.Parser, new[]{ "GemId", "Level", "Count" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.UserDataMsg), global::Protobuf.UserDataMsg.Parser, new[]{ "Username", "Nickname", "Headimg", "Singature", "Level", "Rank", "Score", "Exp", "Money", "Gold", "Gems", "Gemdeck1", "Gemdeck2", "Gemdeck3", "Deckid", "Acceptfriend", "Namedchanged", "Areaexp", "Areaboxes" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.UserDataMsg), global::Protobuf.UserDataMsg.Parser, new[]{ "Username", "Nickname", "Headimg", "Singature", "Level", "Rank", "Score", "Exp", "Money", "Gold", "Gems", "Gemdeck1", "Gemdeck2", "Gemdeck3", "Deckid", "Acceptfriend", "Namedchanged", "Areaexp", "Areaboxes", "Family", "Donate" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FriendMsg), global::Protobuf.FriendMsg.Parser, new[]{ "Username", "Nickname", "Headimg", "Level", "Rank", "Score", "Online", "Gemdeck" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.StoreAreaMsg), global::Protobuf.StoreAreaMsg.Parser, new[]{ "Id", "RefreshTime", "Items" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.StoreItemMsg), global::Protobuf.StoreItemMsg.Parser, new[]{ "Id", "BuyCount" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.RewardItemMsg), global::Protobuf.RewardItemMsg.Parser, new[]{ "Type", "Id", "Count" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.ArenaBoxMsg), global::Protobuf.ArenaBoxMsg.Parser, new[]{ "Pos", "Boxid", "ExpireTime" }, null, null, null)
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.ArenaBoxMsg), global::Protobuf.ArenaBoxMsg.Parser, new[]{ "Pos", "Boxid", "ExpireTime" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyMemberMsg), global::Protobuf.FamilyMemberMsg.Parser, new[]{ "Username", "Nickname", "Headimg", "Position", "Online", "Score", "Level", "WeekDonate", "TotalDonate" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyDonateItemMsg), global::Protobuf.FamilyDonateItemMsg.Parser, new[]{ "Username", "DonateCount" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyChatMsg), global::Protobuf.FamilyChatMsg.Parser, new[]{ "MessageId", "Username", "Nickname", "Headimg", "CreateTime", "Content", "ChatType", "GemId", "Donatelist", "ReceiveCount", "TotalCount", "NoticeId", "Params", "NewUsername", "NewNickname", "NewHeadimg", "NewLevel", "NewScore" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyMsg), global::Protobuf.FamilyMsg.Parser, new[]{ "Uid", "Name", "Desc", "Icons", "Score", "ScoreshopId", "ScoreshopExpired", "FreeJoin", "NeedScore", "Members" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilySearchItemMsg), global::Protobuf.FamilySearchItemMsg.Parser, new[]{ "Uid", "Name", "Desc", "Icons", "MemberCount", "IsActive", "IsFriendIn", "IsNew", "IsApply" }, null, null, null)
           }));
     }
     #endregion
@@ -106,6 +138,10 @@
     /// !竞技场经验
     /// </summary>
     [pbr::OriginalName("ARENAEXP")] Arenaexp = 6,
+    /// <summary>
+    /// 工会捐献积分
+    /// </summary>
+    [pbr::OriginalName("DONATE")] Donate = 7,
   }
 
   /// <summary>
@@ -239,6 +275,26 @@
     /// ! 开宝箱失败,时间没到
     /// </summary>
     [pbr::OriginalName("NotTimeTake_ArenaBox")] NotTimeTakeArenaBox = 28,
+  }
+
+  public enum ChatType {
+    [pbr::OriginalName("ChatType_Begin")] Begin = 0,
+    /// <summary>
+    ///  文本聊天
+    /// </summary>
+    [pbr::OriginalName("ChatType_Text")] Text = 1,
+    /// <summary>
+    ///  捐赠卡牌
+    /// </summary>
+    [pbr::OriginalName("ChatType_DonateGem")] DonateGem = 2,
+    /// <summary>
+    ///  系统消息,需要查询文字字符串配置表
+    /// </summary>
+    [pbr::OriginalName("ChatType_System")] System = 3,
+    /// <summary>
+    ///  新成员加入申请
+    /// </summary>
+    [pbr::OriginalName("ChatType_Join")] Join = 4,
   }
 
   #endregion
@@ -475,6 +531,8 @@
       namedchanged_ = other.namedchanged_;
       areaexp_ = other.areaexp_;
       areaboxes_ = other.areaboxes_.Clone();
+      Family = other.family_ != null ? other.Family.Clone() : null;
+      donate_ = other.donate_;
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -535,6 +593,9 @@
     /// <summary>Field number for the "level" field.</summary>
     public const int LevelFieldNumber = 5;
     private int level_;
+    /// <summary>
+    /// 等级
+    /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Level {
       get { return level_; }
@@ -722,6 +783,34 @@
       get { return areaboxes_; }
     }
 
+    /// <summary>Field number for the "family" field.</summary>
+    public const int FamilyFieldNumber = 20;
+    private global::Protobuf.FamilyMsg family_;
+    /// <summary>
+    ///  工会信息
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public global::Protobuf.FamilyMsg Family {
+      get { return family_; }
+      set {
+        family_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "donate" field.</summary>
+    public const int DonateFieldNumber = 21;
+    private int donate_;
+    /// <summary>
+    /// 工会捐赠积分
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Donate {
+      get { return donate_; }
+      set {
+        donate_ = value;
+      }
+    }
+
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public override bool Equals(object other) {
       return Equals(other as UserDataMsg);
@@ -754,6 +843,8 @@
       if (Namedchanged != other.Namedchanged) return false;
       if (Areaexp != other.Areaexp) return false;
       if(!areaboxes_.Equals(other.areaboxes_)) return false;
+      if (!object.Equals(Family, other.Family)) return false;
+      if (Donate != other.Donate) return false;
       return true;
     }
 
@@ -779,6 +870,8 @@
       if (Namedchanged != false) hash ^= Namedchanged.GetHashCode();
       if (Areaexp != 0) hash ^= Areaexp.GetHashCode();
       hash ^= areaboxes_.GetHashCode();
+      if (family_ != null) hash ^= Family.GetHashCode();
+      if (Donate != 0) hash ^= Donate.GetHashCode();
       return hash;
     }
 
@@ -850,6 +943,14 @@
         output.WriteInt32(Areaexp);
       }
       areaboxes_.WriteTo(output, _repeated_areaboxes_codec);
+      if (family_ != null) {
+        output.WriteRawTag(162, 1);
+        output.WriteMessage(Family);
+      }
+      if (Donate != 0) {
+        output.WriteRawTag(168, 1);
+        output.WriteInt32(Donate);
+      }
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -902,6 +1003,12 @@
         size += 2 + pb::CodedOutputStream.ComputeInt32Size(Areaexp);
       }
       size += areaboxes_.CalculateSize(_repeated_areaboxes_codec);
+      if (family_ != null) {
+        size += 2 + pb::CodedOutputStream.ComputeMessageSize(Family);
+      }
+      if (Donate != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(Donate);
+      }
       return size;
     }
 
@@ -957,6 +1064,15 @@
         Areaexp = other.Areaexp;
       }
       areaboxes_.Add(other.areaboxes_);
+      if (other.family_ != null) {
+        if (family_ == null) {
+          family_ = new global::Protobuf.FamilyMsg();
+        }
+        Family.MergeFrom(other.Family);
+      }
+      if (other.Donate != 0) {
+        Donate = other.Donate;
+      }
     }
 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1044,6 +1160,17 @@
           }
           case 154: {
             areaboxes_.AddEntriesFrom(input, _repeated_areaboxes_codec);
+            break;
+          }
+          case 162: {
+            if (family_ == null) {
+              family_ = new global::Protobuf.FamilyMsg();
+            }
+            input.ReadMessage(family_);
+            break;
+          }
+          case 168: {
+            Donate = input.ReadInt32();
             break;
           }
         }
@@ -1586,7 +1713,7 @@
     public const int IdFieldNumber = 1;
     private int id_;
     /// <summary>
-    ///  store表ID
+    ///  store表ID 或其他具体商城的表
     /// </summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
     public int Id {
@@ -2070,6 +2197,1881 @@
 
   }
 
+  /// <summary>
+  /// !工会成员信息
+  /// </summary>
+  public sealed partial class FamilyMemberMsg : pb::IMessage<FamilyMemberMsg> {
+    private static readonly pb::MessageParser<FamilyMemberMsg> _parser = new pb::MessageParser<FamilyMemberMsg>(() => new FamilyMemberMsg());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyMemberMsg> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.CommonReflection.Descriptor.MessageTypes[7]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyMemberMsg() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyMemberMsg(FamilyMemberMsg other) : this() {
+      username_ = other.username_;
+      nickname_ = other.nickname_;
+      headimg_ = other.headimg_;
+      position_ = other.position_;
+      online_ = other.online_;
+      score_ = other.score_;
+      level_ = other.level_;
+      weekDonate_ = other.weekDonate_;
+      totalDonate_ = other.totalDonate_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyMemberMsg Clone() {
+      return new FamilyMemberMsg(this);
+    }
+
+    /// <summary>Field number for the "username" field.</summary>
+    public const int UsernameFieldNumber = 1;
+    private string username_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Username {
+      get { return username_; }
+      set {
+        username_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "nickname" field.</summary>
+    public const int NicknameFieldNumber = 2;
+    private string nickname_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Nickname {
+      get { return nickname_; }
+      set {
+        nickname_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "headimg" field.</summary>
+    public const int HeadimgFieldNumber = 3;
+    private int headimg_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Headimg {
+      get { return headimg_; }
+      set {
+        headimg_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "position" field.</summary>
+    public const int PositionFieldNumber = 4;
+    private int position_;
+    /// <summary>
+    ///  工会角色 0-会员,1-会长
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Position {
+      get { return position_; }
+      set {
+        position_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "online" field.</summary>
+    public const int OnlineFieldNumber = 5;
+    private bool online_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Online {
+      get { return online_; }
+      set {
+        online_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "score" field.</summary>
+    public const int ScoreFieldNumber = 6;
+    private int score_;
+    /// <summary>
+    /// 分数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Score {
+      get { return score_; }
+      set {
+        score_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "level" field.</summary>
+    public const int LevelFieldNumber = 7;
+    private int level_;
+    /// <summary>
+    /// 等级
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Level {
+      get { return level_; }
+      set {
+        level_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "weekDonate" field.</summary>
+    public const int WeekDonateFieldNumber = 8;
+    private int weekDonate_;
+    /// <summary>
+    ///  本周和总捐献数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int WeekDonate {
+      get { return weekDonate_; }
+      set {
+        weekDonate_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "totalDonate" field.</summary>
+    public const int TotalDonateFieldNumber = 9;
+    private int totalDonate_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int TotalDonate {
+      get { return totalDonate_; }
+      set {
+        totalDonate_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyMemberMsg);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyMemberMsg other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Username != other.Username) return false;
+      if (Nickname != other.Nickname) return false;
+      if (Headimg != other.Headimg) return false;
+      if (Position != other.Position) return false;
+      if (Online != other.Online) return false;
+      if (Score != other.Score) return false;
+      if (Level != other.Level) return false;
+      if (WeekDonate != other.WeekDonate) return false;
+      if (TotalDonate != other.TotalDonate) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Username.Length != 0) hash ^= Username.GetHashCode();
+      if (Nickname.Length != 0) hash ^= Nickname.GetHashCode();
+      if (Headimg != 0) hash ^= Headimg.GetHashCode();
+      if (Position != 0) hash ^= Position.GetHashCode();
+      if (Online != false) hash ^= Online.GetHashCode();
+      if (Score != 0) hash ^= Score.GetHashCode();
+      if (Level != 0) hash ^= Level.GetHashCode();
+      if (WeekDonate != 0) hash ^= WeekDonate.GetHashCode();
+      if (TotalDonate != 0) hash ^= TotalDonate.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Username.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Username);
+      }
+      if (Nickname.Length != 0) {
+        output.WriteRawTag(18);
+        output.WriteString(Nickname);
+      }
+      if (Headimg != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(Headimg);
+      }
+      if (Position != 0) {
+        output.WriteRawTag(32);
+        output.WriteInt32(Position);
+      }
+      if (Online != false) {
+        output.WriteRawTag(40);
+        output.WriteBool(Online);
+      }
+      if (Score != 0) {
+        output.WriteRawTag(48);
+        output.WriteInt32(Score);
+      }
+      if (Level != 0) {
+        output.WriteRawTag(56);
+        output.WriteInt32(Level);
+      }
+      if (WeekDonate != 0) {
+        output.WriteRawTag(64);
+        output.WriteInt32(WeekDonate);
+      }
+      if (TotalDonate != 0) {
+        output.WriteRawTag(72);
+        output.WriteInt32(TotalDonate);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Username.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Username);
+      }
+      if (Nickname.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Nickname);
+      }
+      if (Headimg != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Headimg);
+      }
+      if (Position != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Position);
+      }
+      if (Online != false) {
+        size += 1 + 1;
+      }
+      if (Score != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Score);
+      }
+      if (Level != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Level);
+      }
+      if (WeekDonate != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(WeekDonate);
+      }
+      if (TotalDonate != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(TotalDonate);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyMemberMsg other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Username.Length != 0) {
+        Username = other.Username;
+      }
+      if (other.Nickname.Length != 0) {
+        Nickname = other.Nickname;
+      }
+      if (other.Headimg != 0) {
+        Headimg = other.Headimg;
+      }
+      if (other.Position != 0) {
+        Position = other.Position;
+      }
+      if (other.Online != false) {
+        Online = other.Online;
+      }
+      if (other.Score != 0) {
+        Score = other.Score;
+      }
+      if (other.Level != 0) {
+        Level = other.Level;
+      }
+      if (other.WeekDonate != 0) {
+        WeekDonate = other.WeekDonate;
+      }
+      if (other.TotalDonate != 0) {
+        TotalDonate = other.TotalDonate;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Username = input.ReadString();
+            break;
+          }
+          case 18: {
+            Nickname = input.ReadString();
+            break;
+          }
+          case 24: {
+            Headimg = input.ReadInt32();
+            break;
+          }
+          case 32: {
+            Position = input.ReadInt32();
+            break;
+          }
+          case 40: {
+            Online = input.ReadBool();
+            break;
+          }
+          case 48: {
+            Score = input.ReadInt32();
+            break;
+          }
+          case 56: {
+            Level = input.ReadInt32();
+            break;
+          }
+          case 64: {
+            WeekDonate = input.ReadInt32();
+            break;
+          }
+          case 72: {
+            TotalDonate = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyDonateItemMsg : pb::IMessage<FamilyDonateItemMsg> {
+    private static readonly pb::MessageParser<FamilyDonateItemMsg> _parser = new pb::MessageParser<FamilyDonateItemMsg>(() => new FamilyDonateItemMsg());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyDonateItemMsg> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.CommonReflection.Descriptor.MessageTypes[8]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyDonateItemMsg() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyDonateItemMsg(FamilyDonateItemMsg other) : this() {
+      username_ = other.username_;
+      donateCount_ = other.donateCount_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyDonateItemMsg Clone() {
+      return new FamilyDonateItemMsg(this);
+    }
+
+    /// <summary>Field number for the "username" field.</summary>
+    public const int UsernameFieldNumber = 1;
+    private string username_ = "";
+    /// <summary>
+    ///  
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Username {
+      get { return username_; }
+      set {
+        username_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "donateCount" field.</summary>
+    public const int DonateCountFieldNumber = 2;
+    private int donateCount_;
+    /// <summary>
+    ///  已经捐赠个数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int DonateCount {
+      get { return donateCount_; }
+      set {
+        donateCount_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyDonateItemMsg);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyDonateItemMsg other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Username != other.Username) return false;
+      if (DonateCount != other.DonateCount) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Username.Length != 0) hash ^= Username.GetHashCode();
+      if (DonateCount != 0) hash ^= DonateCount.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Username.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Username);
+      }
+      if (DonateCount != 0) {
+        output.WriteRawTag(16);
+        output.WriteInt32(DonateCount);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Username.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Username);
+      }
+      if (DonateCount != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(DonateCount);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyDonateItemMsg other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Username.Length != 0) {
+        Username = other.Username;
+      }
+      if (other.DonateCount != 0) {
+        DonateCount = other.DonateCount;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Username = input.ReadString();
+            break;
+          }
+          case 16: {
+            DonateCount = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  /// !工会聊天信息
+  /// </summary>
+  public sealed partial class FamilyChatMsg : pb::IMessage<FamilyChatMsg> {
+    private static readonly pb::MessageParser<FamilyChatMsg> _parser = new pb::MessageParser<FamilyChatMsg>(() => new FamilyChatMsg());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyChatMsg> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.CommonReflection.Descriptor.MessageTypes[9]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyChatMsg() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyChatMsg(FamilyChatMsg other) : this() {
+      messageId_ = other.messageId_;
+      username_ = other.username_;
+      nickname_ = other.nickname_;
+      headimg_ = other.headimg_;
+      createTime_ = other.createTime_;
+      content_ = other.content_;
+      chatType_ = other.chatType_;
+      gemId_ = other.gemId_;
+      donatelist_ = other.donatelist_.Clone();
+      receiveCount_ = other.receiveCount_;
+      totalCount_ = other.totalCount_;
+      noticeId_ = other.noticeId_;
+      params_ = other.params_.Clone();
+      newUsername_ = other.newUsername_;
+      newNickname_ = other.newNickname_;
+      newHeadimg_ = other.newHeadimg_;
+      newLevel_ = other.newLevel_;
+      newScore_ = other.newScore_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyChatMsg Clone() {
+      return new FamilyChatMsg(this);
+    }
+
+    /// <summary>Field number for the "messageId" field.</summary>
+    public const int MessageIdFieldNumber = 1;
+    private int messageId_;
+    /// <summary>
+    /// !所有消息按此ID排序,越大表示最近发送的
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int MessageId {
+      get { return messageId_; }
+      set {
+        messageId_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "username" field.</summary>
+    public const int UsernameFieldNumber = 2;
+    private string username_ = "";
+    /// <summary>
+    /// 发起者信息
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Username {
+      get { return username_; }
+      set {
+        username_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "nickname" field.</summary>
+    public const int NicknameFieldNumber = 3;
+    private string nickname_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Nickname {
+      get { return nickname_; }
+      set {
+        nickname_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "headimg" field.</summary>
+    public const int HeadimgFieldNumber = 4;
+    private int headimg_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Headimg {
+      get { return headimg_; }
+      set {
+        headimg_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "createTime" field.</summary>
+    public const int CreateTimeFieldNumber = 5;
+    private int createTime_;
+    /// <summary>
+    ///  聊天发送的时间 单位秒 时间戳 
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CreateTime {
+      get { return createTime_; }
+      set {
+        createTime_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "content" field.</summary>
+    public const int ContentFieldNumber = 6;
+    private string content_ = "";
+    /// <summary>
+    ///  聊天内容,
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Content {
+      get { return content_; }
+      set {
+        content_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "chatType" field.</summary>
+    public const int ChatTypeFieldNumber = 7;
+    private global::Protobuf.ChatType chatType_ = 0;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public global::Protobuf.ChatType ChatType {
+      get { return chatType_; }
+      set {
+        chatType_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "gemId" field.</summary>
+    public const int GemIdFieldNumber = 8;
+    private int gemId_;
+    /// <summary>
+    /// @{ 
+    ///  如果是请求捐赠,这个是卡牌宝石ID
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int GemId {
+      get { return gemId_; }
+      set {
+        gemId_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "donatelist" field.</summary>
+    public const int DonatelistFieldNumber = 9;
+    private static readonly pb::FieldCodec<global::Protobuf.FamilyDonateItemMsg> _repeated_donatelist_codec
+        = pb::FieldCodec.ForMessage(74, global::Protobuf.FamilyDonateItemMsg.Parser);
+    private readonly pbc::RepeatedField<global::Protobuf.FamilyDonateItemMsg> donatelist_ = new pbc::RepeatedField<global::Protobuf.FamilyDonateItemMsg>();
+    /// <summary>
+    ///   捐赠者列表
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<global::Protobuf.FamilyDonateItemMsg> Donatelist {
+      get { return donatelist_; }
+    }
+
+    /// <summary>Field number for the "receiveCount" field.</summary>
+    public const int ReceiveCountFieldNumber = 10;
+    private int receiveCount_;
+    /// <summary>
+    /// ! 总共需要个数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ReceiveCount {
+      get { return receiveCount_; }
+      set {
+        receiveCount_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "TotalCount" field.</summary>
+    public const int TotalCountFieldNumber = 11;
+    private int totalCount_;
+    /// <summary>
+    /// @}
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int TotalCount {
+      get { return totalCount_; }
+      set {
+        totalCount_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "noticeId" field.</summary>
+    public const int NoticeIdFieldNumber = 12;
+    private int noticeId_;
+    /// <summary>
+    /// @{
+    ///  系统聊天,需要替换聊天的配表字段,@see notice 表
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int NoticeId {
+      get { return noticeId_; }
+      set {
+        noticeId_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "params" field.</summary>
+    public const int ParamsFieldNumber = 13;
+    private static readonly pb::FieldCodec<string> _repeated_params_codec
+        = pb::FieldCodec.ForString(106);
+    private readonly pbc::RepeatedField<string> params_ = new pbc::RepeatedField<string>();
+    /// <summary>
+    /// @}
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<string> Params {
+      get { return params_; }
+    }
+
+    /// <summary>Field number for the "newUsername" field.</summary>
+    public const int NewUsernameFieldNumber = 14;
+    private string newUsername_ = "";
+    /// <summary>
+    /// @{
+    ///  只有会长能收到新成员加入消息
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string NewUsername {
+      get { return newUsername_; }
+      set {
+        newUsername_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "newNickname" field.</summary>
+    public const int NewNicknameFieldNumber = 15;
+    private string newNickname_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string NewNickname {
+      get { return newNickname_; }
+      set {
+        newNickname_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "newHeadimg" field.</summary>
+    public const int NewHeadimgFieldNumber = 16;
+    private int newHeadimg_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int NewHeadimg {
+      get { return newHeadimg_; }
+      set {
+        newHeadimg_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "newLevel" field.</summary>
+    public const int NewLevelFieldNumber = 17;
+    private int newLevel_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int NewLevel {
+      get { return newLevel_; }
+      set {
+        newLevel_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "newScore" field.</summary>
+    public const int NewScoreFieldNumber = 18;
+    private int newScore_;
+    /// <summary>
+    /// 分数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int NewScore {
+      get { return newScore_; }
+      set {
+        newScore_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyChatMsg);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyChatMsg other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (MessageId != other.MessageId) return false;
+      if (Username != other.Username) return false;
+      if (Nickname != other.Nickname) return false;
+      if (Headimg != other.Headimg) return false;
+      if (CreateTime != other.CreateTime) return false;
+      if (Content != other.Content) return false;
+      if (ChatType != other.ChatType) return false;
+      if (GemId != other.GemId) return false;
+      if(!donatelist_.Equals(other.donatelist_)) return false;
+      if (ReceiveCount != other.ReceiveCount) return false;
+      if (TotalCount != other.TotalCount) return false;
+      if (NoticeId != other.NoticeId) return false;
+      if(!params_.Equals(other.params_)) return false;
+      if (NewUsername != other.NewUsername) return false;
+      if (NewNickname != other.NewNickname) return false;
+      if (NewHeadimg != other.NewHeadimg) return false;
+      if (NewLevel != other.NewLevel) return false;
+      if (NewScore != other.NewScore) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (MessageId != 0) hash ^= MessageId.GetHashCode();
+      if (Username.Length != 0) hash ^= Username.GetHashCode();
+      if (Nickname.Length != 0) hash ^= Nickname.GetHashCode();
+      if (Headimg != 0) hash ^= Headimg.GetHashCode();
+      if (CreateTime != 0) hash ^= CreateTime.GetHashCode();
+      if (Content.Length != 0) hash ^= Content.GetHashCode();
+      if (ChatType != 0) hash ^= ChatType.GetHashCode();
+      if (GemId != 0) hash ^= GemId.GetHashCode();
+      hash ^= donatelist_.GetHashCode();
+      if (ReceiveCount != 0) hash ^= ReceiveCount.GetHashCode();
+      if (TotalCount != 0) hash ^= TotalCount.GetHashCode();
+      if (NoticeId != 0) hash ^= NoticeId.GetHashCode();
+      hash ^= params_.GetHashCode();
+      if (NewUsername.Length != 0) hash ^= NewUsername.GetHashCode();
+      if (NewNickname.Length != 0) hash ^= NewNickname.GetHashCode();
+      if (NewHeadimg != 0) hash ^= NewHeadimg.GetHashCode();
+      if (NewLevel != 0) hash ^= NewLevel.GetHashCode();
+      if (NewScore != 0) hash ^= NewScore.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (MessageId != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(MessageId);
+      }
+      if (Username.Length != 0) {
+        output.WriteRawTag(18);
+        output.WriteString(Username);
+      }
+      if (Nickname.Length != 0) {
+        output.WriteRawTag(26);
+        output.WriteString(Nickname);
+      }
+      if (Headimg != 0) {
+        output.WriteRawTag(32);
+        output.WriteInt32(Headimg);
+      }
+      if (CreateTime != 0) {
+        output.WriteRawTag(40);
+        output.WriteInt32(CreateTime);
+      }
+      if (Content.Length != 0) {
+        output.WriteRawTag(50);
+        output.WriteString(Content);
+      }
+      if (ChatType != 0) {
+        output.WriteRawTag(56);
+        output.WriteEnum((int) ChatType);
+      }
+      if (GemId != 0) {
+        output.WriteRawTag(64);
+        output.WriteInt32(GemId);
+      }
+      donatelist_.WriteTo(output, _repeated_donatelist_codec);
+      if (ReceiveCount != 0) {
+        output.WriteRawTag(80);
+        output.WriteInt32(ReceiveCount);
+      }
+      if (TotalCount != 0) {
+        output.WriteRawTag(88);
+        output.WriteInt32(TotalCount);
+      }
+      if (NoticeId != 0) {
+        output.WriteRawTag(96);
+        output.WriteInt32(NoticeId);
+      }
+      params_.WriteTo(output, _repeated_params_codec);
+      if (NewUsername.Length != 0) {
+        output.WriteRawTag(114);
+        output.WriteString(NewUsername);
+      }
+      if (NewNickname.Length != 0) {
+        output.WriteRawTag(122);
+        output.WriteString(NewNickname);
+      }
+      if (NewHeadimg != 0) {
+        output.WriteRawTag(128, 1);
+        output.WriteInt32(NewHeadimg);
+      }
+      if (NewLevel != 0) {
+        output.WriteRawTag(136, 1);
+        output.WriteInt32(NewLevel);
+      }
+      if (NewScore != 0) {
+        output.WriteRawTag(144, 1);
+        output.WriteInt32(NewScore);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (MessageId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(MessageId);
+      }
+      if (Username.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Username);
+      }
+      if (Nickname.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Nickname);
+      }
+      if (Headimg != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Headimg);
+      }
+      if (CreateTime != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(CreateTime);
+      }
+      if (Content.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Content);
+      }
+      if (ChatType != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ChatType);
+      }
+      if (GemId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(GemId);
+      }
+      size += donatelist_.CalculateSize(_repeated_donatelist_codec);
+      if (ReceiveCount != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ReceiveCount);
+      }
+      if (TotalCount != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(TotalCount);
+      }
+      if (NoticeId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(NoticeId);
+      }
+      size += params_.CalculateSize(_repeated_params_codec);
+      if (NewUsername.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(NewUsername);
+      }
+      if (NewNickname.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(NewNickname);
+      }
+      if (NewHeadimg != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(NewHeadimg);
+      }
+      if (NewLevel != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(NewLevel);
+      }
+      if (NewScore != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeInt32Size(NewScore);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyChatMsg other) {
+      if (other == null) {
+        return;
+      }
+      if (other.MessageId != 0) {
+        MessageId = other.MessageId;
+      }
+      if (other.Username.Length != 0) {
+        Username = other.Username;
+      }
+      if (other.Nickname.Length != 0) {
+        Nickname = other.Nickname;
+      }
+      if (other.Headimg != 0) {
+        Headimg = other.Headimg;
+      }
+      if (other.CreateTime != 0) {
+        CreateTime = other.CreateTime;
+      }
+      if (other.Content.Length != 0) {
+        Content = other.Content;
+      }
+      if (other.ChatType != 0) {
+        ChatType = other.ChatType;
+      }
+      if (other.GemId != 0) {
+        GemId = other.GemId;
+      }
+      donatelist_.Add(other.donatelist_);
+      if (other.ReceiveCount != 0) {
+        ReceiveCount = other.ReceiveCount;
+      }
+      if (other.TotalCount != 0) {
+        TotalCount = other.TotalCount;
+      }
+      if (other.NoticeId != 0) {
+        NoticeId = other.NoticeId;
+      }
+      params_.Add(other.params_);
+      if (other.NewUsername.Length != 0) {
+        NewUsername = other.NewUsername;
+      }
+      if (other.NewNickname.Length != 0) {
+        NewNickname = other.NewNickname;
+      }
+      if (other.NewHeadimg != 0) {
+        NewHeadimg = other.NewHeadimg;
+      }
+      if (other.NewLevel != 0) {
+        NewLevel = other.NewLevel;
+      }
+      if (other.NewScore != 0) {
+        NewScore = other.NewScore;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            MessageId = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            Username = input.ReadString();
+            break;
+          }
+          case 26: {
+            Nickname = input.ReadString();
+            break;
+          }
+          case 32: {
+            Headimg = input.ReadInt32();
+            break;
+          }
+          case 40: {
+            CreateTime = input.ReadInt32();
+            break;
+          }
+          case 50: {
+            Content = input.ReadString();
+            break;
+          }
+          case 56: {
+            chatType_ = (global::Protobuf.ChatType) input.ReadEnum();
+            break;
+          }
+          case 64: {
+            GemId = input.ReadInt32();
+            break;
+          }
+          case 74: {
+            donatelist_.AddEntriesFrom(input, _repeated_donatelist_codec);
+            break;
+          }
+          case 80: {
+            ReceiveCount = input.ReadInt32();
+            break;
+          }
+          case 88: {
+            TotalCount = input.ReadInt32();
+            break;
+          }
+          case 96: {
+            NoticeId = input.ReadInt32();
+            break;
+          }
+          case 106: {
+            params_.AddEntriesFrom(input, _repeated_params_codec);
+            break;
+          }
+          case 114: {
+            NewUsername = input.ReadString();
+            break;
+          }
+          case 122: {
+            NewNickname = input.ReadString();
+            break;
+          }
+          case 128: {
+            NewHeadimg = input.ReadInt32();
+            break;
+          }
+          case 136: {
+            NewLevel = input.ReadInt32();
+            break;
+          }
+          case 144: {
+            NewScore = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  工会信息
+  /// </summary>
+  public sealed partial class FamilyMsg : pb::IMessage<FamilyMsg> {
+    private static readonly pb::MessageParser<FamilyMsg> _parser = new pb::MessageParser<FamilyMsg>(() => new FamilyMsg());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyMsg> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.CommonReflection.Descriptor.MessageTypes[10]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyMsg() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyMsg(FamilyMsg other) : this() {
+      uid_ = other.uid_;
+      name_ = other.name_;
+      desc_ = other.desc_;
+      icons_ = other.icons_.Clone();
+      score_ = other.score_;
+      scoreshopId_ = other.scoreshopId_;
+      scoreshopExpired_ = other.scoreshopExpired_;
+      freeJoin_ = other.freeJoin_;
+      needScore_ = other.needScore_;
+      members_ = other.members_.Clone();
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyMsg Clone() {
+      return new FamilyMsg(this);
+    }
+
+    /// <summary>Field number for the "uid" field.</summary>
+    public const int UidFieldNumber = 1;
+    private string uid_ = "";
+    /// <summary>
+    ///  工会ID,如果为空表示没有加入工会
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Uid {
+      get { return uid_; }
+      set {
+        uid_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "name" field.</summary>
+    public const int NameFieldNumber = 2;
+    private string name_ = "";
+    /// <summary>
+    ///  工会名
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Name {
+      get { return name_; }
+      set {
+        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "desc" field.</summary>
+    public const int DescFieldNumber = 3;
+    private string desc_ = "";
+    /// <summary>
+    ///  描述 公告
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Desc {
+      get { return desc_; }
+      set {
+        desc_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "icons" field.</summary>
+    public const int IconsFieldNumber = 4;
+    private static readonly pb::FieldCodec<int> _repeated_icons_codec
+        = pb::FieldCodec.ForInt32(34);
+    private readonly pbc::RepeatedField<int> icons_ = new pbc::RepeatedField<int>();
+    /// <summary>
+    ///  徽章图标
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<int> Icons {
+      get { return icons_; }
+    }
+
+    /// <summary>Field number for the "score" field.</summary>
+    public const int ScoreFieldNumber = 5;
+    private int score_;
+    /// <summary>
+    /// !工会积分
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Score {
+      get { return score_; }
+      set {
+        score_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "scoreshopId" field.</summary>
+    public const int ScoreshopIdFieldNumber = 6;
+    private int scoreshopId_;
+    /// <summary>
+    ///  工会加成工会奖励的Id和过期时间,如果是0表示没有奖励
+    ///  @see scoreshop 表
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ScoreshopId {
+      get { return scoreshopId_; }
+      set {
+        scoreshopId_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "scoreshopExpired" field.</summary>
+    public const int ScoreshopExpiredFieldNumber = 7;
+    private int scoreshopExpired_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ScoreshopExpired {
+      get { return scoreshopExpired_; }
+      set {
+        scoreshopExpired_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "freeJoin" field.</summary>
+    public const int FreeJoinFieldNumber = 8;
+    private int freeJoin_;
+    /// <summary>
+    /// ! 1 免费加入,2 需要批准,3 禁止加入
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int FreeJoin {
+      get { return freeJoin_; }
+      set {
+        freeJoin_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "needScore" field.</summary>
+    public const int NeedScoreFieldNumber = 9;
+    private int needScore_;
+    /// <summary>
+    ///  需要积分
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int NeedScore {
+      get { return needScore_; }
+      set {
+        needScore_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "members" field.</summary>
+    public const int MembersFieldNumber = 10;
+    private static readonly pb::FieldCodec<global::Protobuf.FamilyMemberMsg> _repeated_members_codec
+        = pb::FieldCodec.ForMessage(82, global::Protobuf.FamilyMemberMsg.Parser);
+    private readonly pbc::RepeatedField<global::Protobuf.FamilyMemberMsg> members_ = new pbc::RepeatedField<global::Protobuf.FamilyMemberMsg>();
+    /// <summary>
+    /// ! 成员
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<global::Protobuf.FamilyMemberMsg> Members {
+      get { return members_; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyMsg);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyMsg other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Uid != other.Uid) return false;
+      if (Name != other.Name) return false;
+      if (Desc != other.Desc) return false;
+      if(!icons_.Equals(other.icons_)) return false;
+      if (Score != other.Score) return false;
+      if (ScoreshopId != other.ScoreshopId) return false;
+      if (ScoreshopExpired != other.ScoreshopExpired) return false;
+      if (FreeJoin != other.FreeJoin) return false;
+      if (NeedScore != other.NeedScore) return false;
+      if(!members_.Equals(other.members_)) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Uid.Length != 0) hash ^= Uid.GetHashCode();
+      if (Name.Length != 0) hash ^= Name.GetHashCode();
+      if (Desc.Length != 0) hash ^= Desc.GetHashCode();
+      hash ^= icons_.GetHashCode();
+      if (Score != 0) hash ^= Score.GetHashCode();
+      if (ScoreshopId != 0) hash ^= ScoreshopId.GetHashCode();
+      if (ScoreshopExpired != 0) hash ^= ScoreshopExpired.GetHashCode();
+      if (FreeJoin != 0) hash ^= FreeJoin.GetHashCode();
+      if (NeedScore != 0) hash ^= NeedScore.GetHashCode();
+      hash ^= members_.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Uid.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Uid);
+      }
+      if (Name.Length != 0) {
+        output.WriteRawTag(18);
+        output.WriteString(Name);
+      }
+      if (Desc.Length != 0) {
+        output.WriteRawTag(26);
+        output.WriteString(Desc);
+      }
+      icons_.WriteTo(output, _repeated_icons_codec);
+      if (Score != 0) {
+        output.WriteRawTag(40);
+        output.WriteInt32(Score);
+      }
+      if (ScoreshopId != 0) {
+        output.WriteRawTag(48);
+        output.WriteInt32(ScoreshopId);
+      }
+      if (ScoreshopExpired != 0) {
+        output.WriteRawTag(56);
+        output.WriteInt32(ScoreshopExpired);
+      }
+      if (FreeJoin != 0) {
+        output.WriteRawTag(64);
+        output.WriteInt32(FreeJoin);
+      }
+      if (NeedScore != 0) {
+        output.WriteRawTag(72);
+        output.WriteInt32(NeedScore);
+      }
+      members_.WriteTo(output, _repeated_members_codec);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Uid.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Uid);
+      }
+      if (Name.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+      }
+      if (Desc.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Desc);
+      }
+      size += icons_.CalculateSize(_repeated_icons_codec);
+      if (Score != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Score);
+      }
+      if (ScoreshopId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScoreshopId);
+      }
+      if (ScoreshopExpired != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScoreshopExpired);
+      }
+      if (FreeJoin != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(FreeJoin);
+      }
+      if (NeedScore != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(NeedScore);
+      }
+      size += members_.CalculateSize(_repeated_members_codec);
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyMsg other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Uid.Length != 0) {
+        Uid = other.Uid;
+      }
+      if (other.Name.Length != 0) {
+        Name = other.Name;
+      }
+      if (other.Desc.Length != 0) {
+        Desc = other.Desc;
+      }
+      icons_.Add(other.icons_);
+      if (other.Score != 0) {
+        Score = other.Score;
+      }
+      if (other.ScoreshopId != 0) {
+        ScoreshopId = other.ScoreshopId;
+      }
+      if (other.ScoreshopExpired != 0) {
+        ScoreshopExpired = other.ScoreshopExpired;
+      }
+      if (other.FreeJoin != 0) {
+        FreeJoin = other.FreeJoin;
+      }
+      if (other.NeedScore != 0) {
+        NeedScore = other.NeedScore;
+      }
+      members_.Add(other.members_);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Uid = input.ReadString();
+            break;
+          }
+          case 18: {
+            Name = input.ReadString();
+            break;
+          }
+          case 26: {
+            Desc = input.ReadString();
+            break;
+          }
+          case 34:
+          case 32: {
+            icons_.AddEntriesFrom(input, _repeated_icons_codec);
+            break;
+          }
+          case 40: {
+            Score = input.ReadInt32();
+            break;
+          }
+          case 48: {
+            ScoreshopId = input.ReadInt32();
+            break;
+          }
+          case 56: {
+            ScoreshopExpired = input.ReadInt32();
+            break;
+          }
+          case 64: {
+            FreeJoin = input.ReadInt32();
+            break;
+          }
+          case 72: {
+            NeedScore = input.ReadInt32();
+            break;
+          }
+          case 82: {
+            members_.AddEntriesFrom(input, _repeated_members_codec);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  /// !用户查询工会的工会列表
+  /// </summary>
+  public sealed partial class FamilySearchItemMsg : pb::IMessage<FamilySearchItemMsg> {
+    private static readonly pb::MessageParser<FamilySearchItemMsg> _parser = new pb::MessageParser<FamilySearchItemMsg>(() => new FamilySearchItemMsg());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilySearchItemMsg> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.CommonReflection.Descriptor.MessageTypes[11]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearchItemMsg() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearchItemMsg(FamilySearchItemMsg other) : this() {
+      uid_ = other.uid_;
+      name_ = other.name_;
+      desc_ = other.desc_;
+      icons_ = other.icons_.Clone();
+      memberCount_ = other.memberCount_;
+      isActive_ = other.isActive_;
+      isFriendIn_ = other.isFriendIn_;
+      isNew_ = other.isNew_;
+      isApply_ = other.isApply_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearchItemMsg Clone() {
+      return new FamilySearchItemMsg(this);
+    }
+
+    /// <summary>Field number for the "uid" field.</summary>
+    public const int UidFieldNumber = 1;
+    private string uid_ = "";
+    /// <summary>
+    ///  工会ID
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Uid {
+      get { return uid_; }
+      set {
+        uid_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "name" field.</summary>
+    public const int NameFieldNumber = 2;
+    private string name_ = "";
+    /// <summary>
+    ///  工会名
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Name {
+      get { return name_; }
+      set {
+        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "desc" field.</summary>
+    public const int DescFieldNumber = 3;
+    private string desc_ = "";
+    /// <summary>
+    ///  描述
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Desc {
+      get { return desc_; }
+      set {
+        desc_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "icons" field.</summary>
+    public const int IconsFieldNumber = 4;
+    private static readonly pb::FieldCodec<int> _repeated_icons_codec
+        = pb::FieldCodec.ForInt32(34);
+    private readonly pbc::RepeatedField<int> icons_ = new pbc::RepeatedField<int>();
+    /// <summary>
+    ///  徽章图标
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<int> Icons {
+      get { return icons_; }
+    }
+
+    /// <summary>Field number for the "memberCount" field.</summary>
+    public const int MemberCountFieldNumber = 5;
+    private int memberCount_;
+    /// <summary>
+    ///  当前人数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int MemberCount {
+      get { return memberCount_; }
+      set {
+        memberCount_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "isActive" field.</summary>
+    public const int IsActiveFieldNumber = 6;
+    private bool isActive_;
+    /// <summary>
+    ///  是否活跃
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool IsActive {
+      get { return isActive_; }
+      set {
+        isActive_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "isFriendIn" field.</summary>
+    public const int IsFriendInFieldNumber = 7;
+    private bool isFriendIn_;
+    /// <summary>
+    ///  是否好友在此工会
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool IsFriendIn {
+      get { return isFriendIn_; }
+      set {
+        isFriendIn_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "isNew" field.</summary>
+    public const int IsNewFieldNumber = 8;
+    private bool isNew_;
+    /// <summary>
+    ///  是否是新公会
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool IsNew {
+      get { return isNew_; }
+      set {
+        isNew_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "isApply" field.</summary>
+    public const int IsApplyFieldNumber = 9;
+    private bool isApply_;
+    /// <summary>
+    ///  是否已申请
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool IsApply {
+      get { return isApply_; }
+      set {
+        isApply_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilySearchItemMsg);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilySearchItemMsg other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Uid != other.Uid) return false;
+      if (Name != other.Name) return false;
+      if (Desc != other.Desc) return false;
+      if(!icons_.Equals(other.icons_)) return false;
+      if (MemberCount != other.MemberCount) return false;
+      if (IsActive != other.IsActive) return false;
+      if (IsFriendIn != other.IsFriendIn) return false;
+      if (IsNew != other.IsNew) return false;
+      if (IsApply != other.IsApply) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Uid.Length != 0) hash ^= Uid.GetHashCode();
+      if (Name.Length != 0) hash ^= Name.GetHashCode();
+      if (Desc.Length != 0) hash ^= Desc.GetHashCode();
+      hash ^= icons_.GetHashCode();
+      if (MemberCount != 0) hash ^= MemberCount.GetHashCode();
+      if (IsActive != false) hash ^= IsActive.GetHashCode();
+      if (IsFriendIn != false) hash ^= IsFriendIn.GetHashCode();
+      if (IsNew != false) hash ^= IsNew.GetHashCode();
+      if (IsApply != false) hash ^= IsApply.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Uid.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Uid);
+      }
+      if (Name.Length != 0) {
+        output.WriteRawTag(18);
+        output.WriteString(Name);
+      }
+      if (Desc.Length != 0) {
+        output.WriteRawTag(26);
+        output.WriteString(Desc);
+      }
+      icons_.WriteTo(output, _repeated_icons_codec);
+      if (MemberCount != 0) {
+        output.WriteRawTag(40);
+        output.WriteInt32(MemberCount);
+      }
+      if (IsActive != false) {
+        output.WriteRawTag(48);
+        output.WriteBool(IsActive);
+      }
+      if (IsFriendIn != false) {
+        output.WriteRawTag(56);
+        output.WriteBool(IsFriendIn);
+      }
+      if (IsNew != false) {
+        output.WriteRawTag(64);
+        output.WriteBool(IsNew);
+      }
+      if (IsApply != false) {
+        output.WriteRawTag(72);
+        output.WriteBool(IsApply);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Uid.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Uid);
+      }
+      if (Name.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+      }
+      if (Desc.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Desc);
+      }
+      size += icons_.CalculateSize(_repeated_icons_codec);
+      if (MemberCount != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(MemberCount);
+      }
+      if (IsActive != false) {
+        size += 1 + 1;
+      }
+      if (IsFriendIn != false) {
+        size += 1 + 1;
+      }
+      if (IsNew != false) {
+        size += 1 + 1;
+      }
+      if (IsApply != false) {
+        size += 1 + 1;
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilySearchItemMsg other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Uid.Length != 0) {
+        Uid = other.Uid;
+      }
+      if (other.Name.Length != 0) {
+        Name = other.Name;
+      }
+      if (other.Desc.Length != 0) {
+        Desc = other.Desc;
+      }
+      icons_.Add(other.icons_);
+      if (other.MemberCount != 0) {
+        MemberCount = other.MemberCount;
+      }
+      if (other.IsActive != false) {
+        IsActive = other.IsActive;
+      }
+      if (other.IsFriendIn != false) {
+        IsFriendIn = other.IsFriendIn;
+      }
+      if (other.IsNew != false) {
+        IsNew = other.IsNew;
+      }
+      if (other.IsApply != false) {
+        IsApply = other.IsApply;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Uid = input.ReadString();
+            break;
+          }
+          case 18: {
+            Name = input.ReadString();
+            break;
+          }
+          case 26: {
+            Desc = input.ReadString();
+            break;
+          }
+          case 34:
+          case 32: {
+            icons_.AddEntriesFrom(input, _repeated_icons_codec);
+            break;
+          }
+          case 40: {
+            MemberCount = input.ReadInt32();
+            break;
+          }
+          case 48: {
+            IsActive = input.ReadBool();
+            break;
+          }
+          case 56: {
+            IsFriendIn = input.ReadBool();
+            break;
+          }
+          case 64: {
+            IsNew = input.ReadBool();
+            break;
+          }
+          case 72: {
+            IsApply = input.ReadBool();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
   #endregion
 
 }
diff --git a/Assets/Scripts/Net/NetExtends/Game.cs b/Assets/Scripts/Net/NetExtends/Game.cs
index dd2d8a5..3dea287 100644
--- a/Assets/Scripts/Net/NetExtends/Game.cs
+++ b/Assets/Scripts/Net/NetExtends/Game.cs
@@ -94,7 +94,48 @@
             "KAgimAEKEFRha2VBcmVuYUJveF9TMkMSEQoJZXJyb3Jjb2RlGAEgASgFEgsK",
             "A3BvcxgCIAEoBRINCgVib3hpZBgDIAEoBRIpCghjdXJpdGVtcxgEIAMoCzIX",
             "LnByb3RvYnVmLlJld2FyZEl0ZW1Nc2cSKgoJYm94cmV3YXJkGAUgAygLMhcu",
-            "cHJvdG9idWYuUmV3YXJkSXRlbU1zZ2IGcHJvdG8z"));
+            "cHJvdG9idWYuUmV3YXJkSXRlbU1zZyI+ChBGYW1pbHlTZWFyY2hfQzJTEgwK",
+            "BG5hbWUYASABKAkSDQoFc3RhcnQYAiABKAUSDQoFbGltaXQYAyABKAUiZwoQ",
+            "RmFtaWx5U2VhcmNoX1MyQxIRCgllcnJvcmNvZGUYASABKAUSMQoKZmFtaWx5",
+            "bGlzdBgCIAMoCzIdLnByb3RvYnVmLkZhbWlseVNlYXJjaEl0ZW1Nc2cSDQoF",
+            "dG90YWwYAyABKAUiOgoWRmFtaWx5UGxheWVyT25saW5lX1MyQxIQCgh1c2Vy",
+            "bmFtZRgBIAEoBRIOCgZvbmxpbmUYAiABKAgiYgoQRmFtaWx5Q3JlYXRlX0My",
+            "UxIMCgRuYW1lGAEgASgJEgwKBGRlc2MYAiABKAkSDQoFaWNvbnMYAyADKAUS",
+            "EAoIZnJlZUpvaW4YBCABKAUSEQoJbmVlZFNjb3JlGAUgASgFIh0KDkZhbWls",
+            "eUpvaW5fQzJTEgsKA3VpZBgBIAEoCSIwCg5GYW1pbHlKb2luX1MyQxIRCgll",
+            "cnJvcmNvZGUYASABKAUSCwoDdWlkGAIgASgJIjEKEUZhbWlseUdldENoYXRf",
+            "QzJTEg0KBXN0YXJ0GAEgASgFEg0KBWxpbWl0GAIgASgFInUKEUZhbWlseUdl",
+            "dENoYXRfUzJDEhEKCWVycm9yY29kZRgBIAEoBRIpCghtZXNzYWdlcxgCIAMo",
+            "CzIXLnByb3RvYnVmLkZhbWlseUNoYXRNc2cSDQoFdG90YWwYAyABKAUSEwoL",
+            "b25saW5lQ291bnQYBCABKAUiTAoTRmFtaWx5U3RhcnRDaGF0X0MyUxIkCghj",
+            "aGF0VHlwZRgBIAEoDjISLnByb3RvYnVmLkNoYXRUeXBlEg8KB2NvbnRlbnQY",
+            "AiABKAkiUgoTRmFtaWx5U3RhcnRDaGF0X1MyQxIRCgllcnJvcmNvZGUYASAB",
+            "KAUSKAoHbWVzc2FnZRgCIAEoCzIXLnByb3RvYnVmLkZhbWlseUNoYXRNc2ci",
+            "KgoVRmFtaWx5U3RhcnREb25hdGVfQzJTEhEKCW1lc3NhZ2VJZBgBIAEoBSJU",
+            "ChVGYW1pbHlTdGFydERvbmF0ZV9TMkMSEQoJZXJyb3Jjb2RlGAEgASgFEigK",
+            "B21lc3NhZ2UYAiABKAsyFy5wcm90b2J1Zi5GYW1pbHlDaGF0TXNnIhAKDkZh",
+            "bWlseVF1aXRfQzJTIiMKDkZhbWlseVF1aXRfUzJDEhEKCWVycm9yY29kZRgB",
+            "IAEoBSIoChNGYW1pbHlBZ3JlZUpvaW5fQzJTEhEKCW1lc3NhZ2VJZBgBIAEo",
+            "BSJWChNGYW1pbHlBZ3JlZUpvaW5fUzJDEhEKCWVycm9yY29kZRgBIAEoBRIs",
+            "CgluZXdNZW1iZXIYAiABKAsyGS5wcm90b2J1Zi5GYW1pbHlNZW1iZXJNc2ci",
+            "JgoSRmFtaWx5S2lja1VzZXJfQzJTEhAKCHVzZXJuYW1lGAEgASgJIicKEkZh",
+            "bWlseUtpY2tVc2VyX1MyQxIRCgllcnJvcmNvZGUYASABKAUiKQoVRmFtaWx5",
+            "VHJhbnNMZWFkZXJfQzJTEhAKCHVzZXJuYW1lGAEgASgJIioKFUZhbWlseVRy",
+            "YW5zTGVhZGVyX1MyQxIRCgllcnJvcmNvZGUYASABKAUiGQoXRmFtaWx5R2V0",
+            "RG9uYXRlU2hvcF9DMlMiZwoXRmFtaWx5R2V0RG9uYXRlU2hvcF9TMkMSEQoJ",
+            "ZXJyb3Jjb2RlGAEgASgFEiUKBWl0ZW1zGAIgAygLMhYucHJvdG9idWYuU3Rv",
+            "cmVJdGVtTXNnEhIKCmV4cGlyZVRpbWUYAyABKAUiLwoXRmFtaWx5QnV5RG9u",
+            "YXRlU2hvcF9DMlMSFAoMZG9uYXRlc2hvcElkGAEgASgFIn8KF0ZhbWlseUJ1",
+            "eURvbmF0ZVNob3BfUzJDEhEKCWVycm9yY29kZRgBIAEoBRIUCgxkb25hdGVz",
+            "aG9wSWQYAiABKAUSKQoIY3VyaXRlbXMYAyADKAsyFy5wcm90b2J1Zi5SZXdh",
+            "cmRJdGVtTXNnEhAKCGJ1eUNvdW50GAQgASgFIhgKFkZhbWlseUdldFNjb3Jl",
+            "U2hvcF9DMlMiZgoWRmFtaWx5R2V0U2NvcmVTaG9wX1MyQxIRCgllcnJvcmNv",
+            "ZGUYASABKAUSJQoFaXRlbXMYAiADKAsyFi5wcm90b2J1Zi5TdG9yZUl0ZW1N",
+            "c2cSEgoKZXhwaXJlVGltZRgDIAEoBSItChZGYW1pbHlCdXlTY29yZVNob3Bf",
+            "QzJTEhMKC3Njb3Jlc2hvcElkGAEgASgFIoEBChZGYW1pbHlCdXlTY29yZVNo",
+            "b3BfUzJDEhEKCWVycm9yY29kZRgBIAEoBRITCgtzY29yZXNob3BJZBgCIAEo",
+            "BRIYChBzY29yZXNob3BFeHBpcmVkGAMgASgFEhMKC2ZhbWlseVNjb3JlGAQg",
+            "ASgFEhAKCGJ1eUNvdW50GAUgASgFYgZwcm90bzM="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { global::Protobuf.CommonReflection.Descriptor, },
           new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
@@ -146,7 +187,35 @@
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.UnLockArenaBox_C2S), global::Protobuf.UnLockArenaBox_C2S.Parser, new[]{ "Pos" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.UnLockArenaBox_S2C), global::Protobuf.UnLockArenaBox_S2C.Parser, new[]{ "Errorcode", "Areabox" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.TakeArenaBox_C2S), global::Protobuf.TakeArenaBox_C2S.Parser, new[]{ "Pos", "Free" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.TakeArenaBox_S2C), global::Protobuf.TakeArenaBox_S2C.Parser, new[]{ "Errorcode", "Pos", "Boxid", "Curitems", "Boxreward" }, null, null, null)
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.TakeArenaBox_S2C), global::Protobuf.TakeArenaBox_S2C.Parser, new[]{ "Errorcode", "Pos", "Boxid", "Curitems", "Boxreward" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilySearch_C2S), global::Protobuf.FamilySearch_C2S.Parser, new[]{ "Name", "Start", "Limit" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilySearch_S2C), global::Protobuf.FamilySearch_S2C.Parser, new[]{ "Errorcode", "Familylist", "Total" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyPlayerOnline_S2C), global::Protobuf.FamilyPlayerOnline_S2C.Parser, new[]{ "Username", "Online" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyCreate_C2S), global::Protobuf.FamilyCreate_C2S.Parser, new[]{ "Name", "Desc", "Icons", "FreeJoin", "NeedScore" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyJoin_C2S), global::Protobuf.FamilyJoin_C2S.Parser, new[]{ "Uid" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyJoin_S2C), global::Protobuf.FamilyJoin_S2C.Parser, new[]{ "Errorcode", "Uid" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyGetChat_C2S), global::Protobuf.FamilyGetChat_C2S.Parser, new[]{ "Start", "Limit" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyGetChat_S2C), global::Protobuf.FamilyGetChat_S2C.Parser, new[]{ "Errorcode", "Messages", "Total", "OnlineCount" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyStartChat_C2S), global::Protobuf.FamilyStartChat_C2S.Parser, new[]{ "ChatType", "Content" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyStartChat_S2C), global::Protobuf.FamilyStartChat_S2C.Parser, new[]{ "Errorcode", "Message" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyStartDonate_C2S), global::Protobuf.FamilyStartDonate_C2S.Parser, new[]{ "MessageId" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyStartDonate_S2C), global::Protobuf.FamilyStartDonate_S2C.Parser, new[]{ "Errorcode", "Message" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyQuit_C2S), global::Protobuf.FamilyQuit_C2S.Parser, null, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyQuit_S2C), global::Protobuf.FamilyQuit_S2C.Parser, new[]{ "Errorcode" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyAgreeJoin_C2S), global::Protobuf.FamilyAgreeJoin_C2S.Parser, new[]{ "MessageId" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyAgreeJoin_S2C), global::Protobuf.FamilyAgreeJoin_S2C.Parser, new[]{ "Errorcode", "NewMember" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyKickUser_C2S), global::Protobuf.FamilyKickUser_C2S.Parser, new[]{ "Username" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyKickUser_S2C), global::Protobuf.FamilyKickUser_S2C.Parser, new[]{ "Errorcode" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyTransLeader_C2S), global::Protobuf.FamilyTransLeader_C2S.Parser, new[]{ "Username" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyTransLeader_S2C), global::Protobuf.FamilyTransLeader_S2C.Parser, new[]{ "Errorcode" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyGetDonateShop_C2S), global::Protobuf.FamilyGetDonateShop_C2S.Parser, null, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyGetDonateShop_S2C), global::Protobuf.FamilyGetDonateShop_S2C.Parser, new[]{ "Errorcode", "Items", "ExpireTime" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyBuyDonateShop_C2S), global::Protobuf.FamilyBuyDonateShop_C2S.Parser, new[]{ "DonateshopId" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyBuyDonateShop_S2C), global::Protobuf.FamilyBuyDonateShop_S2C.Parser, new[]{ "Errorcode", "DonateshopId", "Curitems", "BuyCount" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyGetScoreShop_C2S), global::Protobuf.FamilyGetScoreShop_C2S.Parser, null, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyGetScoreShop_S2C), global::Protobuf.FamilyGetScoreShop_S2C.Parser, new[]{ "Errorcode", "Items", "ExpireTime" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyBuyScoreShop_C2S), global::Protobuf.FamilyBuyScoreShop_C2S.Parser, new[]{ "ScoreshopId" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::Protobuf.FamilyBuyScoreShop_S2C), global::Protobuf.FamilyBuyScoreShop_S2C.Parser, new[]{ "Errorcode", "ScoreshopId", "ScoreshopExpired", "FamilyScore", "BuyCount" }, null, null, null)
           }));
     }
     #endregion
@@ -7788,6 +7857,4089 @@
 
   }
 
+  /// <summary>
+  ///  查找工会,支持模糊查询 
+  /// </summary>
+  public sealed partial class FamilySearch_C2S : pb::IMessage<FamilySearch_C2S> {
+    private static readonly pb::MessageParser<FamilySearch_C2S> _parser = new pb::MessageParser<FamilySearch_C2S>(() => new FamilySearch_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilySearch_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[49]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearch_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearch_C2S(FamilySearch_C2S other) : this() {
+      name_ = other.name_;
+      start_ = other.start_;
+      limit_ = other.limit_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearch_C2S Clone() {
+      return new FamilySearch_C2S(this);
+    }
+
+    /// <summary>Field number for the "name" field.</summary>
+    public const int NameFieldNumber = 1;
+    private string name_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Name {
+      get { return name_; }
+      set {
+        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "start" field.</summary>
+    public const int StartFieldNumber = 2;
+    private int start_;
+    /// <summary>
+    ///  起始分页0
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Start {
+      get { return start_; }
+      set {
+        start_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "limit" field.</summary>
+    public const int LimitFieldNumber = 3;
+    private int limit_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Limit {
+      get { return limit_; }
+      set {
+        limit_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilySearch_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilySearch_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Name != other.Name) return false;
+      if (Start != other.Start) return false;
+      if (Limit != other.Limit) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Name.Length != 0) hash ^= Name.GetHashCode();
+      if (Start != 0) hash ^= Start.GetHashCode();
+      if (Limit != 0) hash ^= Limit.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Name.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Name);
+      }
+      if (Start != 0) {
+        output.WriteRawTag(16);
+        output.WriteInt32(Start);
+      }
+      if (Limit != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(Limit);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Name.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+      }
+      if (Start != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Start);
+      }
+      if (Limit != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Limit);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilySearch_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Name.Length != 0) {
+        Name = other.Name;
+      }
+      if (other.Start != 0) {
+        Start = other.Start;
+      }
+      if (other.Limit != 0) {
+        Limit = other.Limit;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Name = input.ReadString();
+            break;
+          }
+          case 16: {
+            Start = input.ReadInt32();
+            break;
+          }
+          case 24: {
+            Limit = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilySearch_S2C : pb::IMessage<FamilySearch_S2C> {
+    private static readonly pb::MessageParser<FamilySearch_S2C> _parser = new pb::MessageParser<FamilySearch_S2C>(() => new FamilySearch_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilySearch_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[50]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearch_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearch_S2C(FamilySearch_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      familylist_ = other.familylist_.Clone();
+      total_ = other.total_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilySearch_S2C Clone() {
+      return new FamilySearch_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "familylist" field.</summary>
+    public const int FamilylistFieldNumber = 2;
+    private static readonly pb::FieldCodec<global::Protobuf.FamilySearchItemMsg> _repeated_familylist_codec
+        = pb::FieldCodec.ForMessage(18, global::Protobuf.FamilySearchItemMsg.Parser);
+    private readonly pbc::RepeatedField<global::Protobuf.FamilySearchItemMsg> familylist_ = new pbc::RepeatedField<global::Protobuf.FamilySearchItemMsg>();
+    /// <summary>
+    /// 工会
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<global::Protobuf.FamilySearchItemMsg> Familylist {
+      get { return familylist_; }
+    }
+
+    /// <summary>Field number for the "total" field.</summary>
+    public const int TotalFieldNumber = 3;
+    private int total_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Total {
+      get { return total_; }
+      set {
+        total_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilySearch_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilySearch_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if(!familylist_.Equals(other.familylist_)) return false;
+      if (Total != other.Total) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      hash ^= familylist_.GetHashCode();
+      if (Total != 0) hash ^= Total.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      familylist_.WriteTo(output, _repeated_familylist_codec);
+      if (Total != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(Total);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      size += familylist_.CalculateSize(_repeated_familylist_codec);
+      if (Total != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Total);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilySearch_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      familylist_.Add(other.familylist_);
+      if (other.Total != 0) {
+        Total = other.Total;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            familylist_.AddEntriesFrom(input, _repeated_familylist_codec);
+            break;
+          }
+          case 24: {
+            Total = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  服务器广播其他玩家在线或下线
+  /// </summary>
+  public sealed partial class FamilyPlayerOnline_S2C : pb::IMessage<FamilyPlayerOnline_S2C> {
+    private static readonly pb::MessageParser<FamilyPlayerOnline_S2C> _parser = new pb::MessageParser<FamilyPlayerOnline_S2C>(() => new FamilyPlayerOnline_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyPlayerOnline_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[51]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyPlayerOnline_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyPlayerOnline_S2C(FamilyPlayerOnline_S2C other) : this() {
+      username_ = other.username_;
+      online_ = other.online_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyPlayerOnline_S2C Clone() {
+      return new FamilyPlayerOnline_S2C(this);
+    }
+
+    /// <summary>Field number for the "username" field.</summary>
+    public const int UsernameFieldNumber = 1;
+    private int username_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Username {
+      get { return username_; }
+      set {
+        username_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "online" field.</summary>
+    public const int OnlineFieldNumber = 2;
+    private bool online_;
+    /// <summary>
+    ///  true 在线 false 不在线
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Online {
+      get { return online_; }
+      set {
+        online_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyPlayerOnline_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyPlayerOnline_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Username != other.Username) return false;
+      if (Online != other.Online) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Username != 0) hash ^= Username.GetHashCode();
+      if (Online != false) hash ^= Online.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Username != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Username);
+      }
+      if (Online != false) {
+        output.WriteRawTag(16);
+        output.WriteBool(Online);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Username != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Username);
+      }
+      if (Online != false) {
+        size += 1 + 1;
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyPlayerOnline_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Username != 0) {
+        Username = other.Username;
+      }
+      if (other.Online != false) {
+        Online = other.Online;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Username = input.ReadInt32();
+            break;
+          }
+          case 16: {
+            Online = input.ReadBool();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  创建工会,成功返回 Success
+  /// </summary>
+  public sealed partial class FamilyCreate_C2S : pb::IMessage<FamilyCreate_C2S> {
+    private static readonly pb::MessageParser<FamilyCreate_C2S> _parser = new pb::MessageParser<FamilyCreate_C2S>(() => new FamilyCreate_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyCreate_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[52]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyCreate_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyCreate_C2S(FamilyCreate_C2S other) : this() {
+      name_ = other.name_;
+      desc_ = other.desc_;
+      icons_ = other.icons_.Clone();
+      freeJoin_ = other.freeJoin_;
+      needScore_ = other.needScore_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyCreate_C2S Clone() {
+      return new FamilyCreate_C2S(this);
+    }
+
+    /// <summary>Field number for the "name" field.</summary>
+    public const int NameFieldNumber = 1;
+    private string name_ = "";
+    /// <summary>
+    ///  工会名
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Name {
+      get { return name_; }
+      set {
+        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "desc" field.</summary>
+    public const int DescFieldNumber = 2;
+    private string desc_ = "";
+    /// <summary>
+    ///  描述 公告
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Desc {
+      get { return desc_; }
+      set {
+        desc_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "icons" field.</summary>
+    public const int IconsFieldNumber = 3;
+    private static readonly pb::FieldCodec<int> _repeated_icons_codec
+        = pb::FieldCodec.ForInt32(26);
+    private readonly pbc::RepeatedField<int> icons_ = new pbc::RepeatedField<int>();
+    /// <summary>
+    ///  徽章图标
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<int> Icons {
+      get { return icons_; }
+    }
+
+    /// <summary>Field number for the "freeJoin" field.</summary>
+    public const int FreeJoinFieldNumber = 4;
+    private int freeJoin_;
+    /// <summary>
+    /// ! 1 免费加入,2 需要批准,3 禁止加入
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int FreeJoin {
+      get { return freeJoin_; }
+      set {
+        freeJoin_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "needScore" field.</summary>
+    public const int NeedScoreFieldNumber = 5;
+    private int needScore_;
+    /// <summary>
+    ///  需要积分
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int NeedScore {
+      get { return needScore_; }
+      set {
+        needScore_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyCreate_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyCreate_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Name != other.Name) return false;
+      if (Desc != other.Desc) return false;
+      if(!icons_.Equals(other.icons_)) return false;
+      if (FreeJoin != other.FreeJoin) return false;
+      if (NeedScore != other.NeedScore) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Name.Length != 0) hash ^= Name.GetHashCode();
+      if (Desc.Length != 0) hash ^= Desc.GetHashCode();
+      hash ^= icons_.GetHashCode();
+      if (FreeJoin != 0) hash ^= FreeJoin.GetHashCode();
+      if (NeedScore != 0) hash ^= NeedScore.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Name.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Name);
+      }
+      if (Desc.Length != 0) {
+        output.WriteRawTag(18);
+        output.WriteString(Desc);
+      }
+      icons_.WriteTo(output, _repeated_icons_codec);
+      if (FreeJoin != 0) {
+        output.WriteRawTag(32);
+        output.WriteInt32(FreeJoin);
+      }
+      if (NeedScore != 0) {
+        output.WriteRawTag(40);
+        output.WriteInt32(NeedScore);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Name.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+      }
+      if (Desc.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Desc);
+      }
+      size += icons_.CalculateSize(_repeated_icons_codec);
+      if (FreeJoin != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(FreeJoin);
+      }
+      if (NeedScore != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(NeedScore);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyCreate_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Name.Length != 0) {
+        Name = other.Name;
+      }
+      if (other.Desc.Length != 0) {
+        Desc = other.Desc;
+      }
+      icons_.Add(other.icons_);
+      if (other.FreeJoin != 0) {
+        FreeJoin = other.FreeJoin;
+      }
+      if (other.NeedScore != 0) {
+        NeedScore = other.NeedScore;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Name = input.ReadString();
+            break;
+          }
+          case 18: {
+            Desc = input.ReadString();
+            break;
+          }
+          case 26:
+          case 24: {
+            icons_.AddEntriesFrom(input, _repeated_icons_codec);
+            break;
+          }
+          case 32: {
+            FreeJoin = input.ReadInt32();
+            break;
+          }
+          case 40: {
+            NeedScore = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  申请加入公会
+  /// </summary>
+  public sealed partial class FamilyJoin_C2S : pb::IMessage<FamilyJoin_C2S> {
+    private static readonly pb::MessageParser<FamilyJoin_C2S> _parser = new pb::MessageParser<FamilyJoin_C2S>(() => new FamilyJoin_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyJoin_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[53]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyJoin_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyJoin_C2S(FamilyJoin_C2S other) : this() {
+      uid_ = other.uid_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyJoin_C2S Clone() {
+      return new FamilyJoin_C2S(this);
+    }
+
+    /// <summary>Field number for the "uid" field.</summary>
+    public const int UidFieldNumber = 1;
+    private string uid_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Uid {
+      get { return uid_; }
+      set {
+        uid_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyJoin_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyJoin_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Uid != other.Uid) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Uid.Length != 0) hash ^= Uid.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Uid.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Uid);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Uid.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Uid);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyJoin_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Uid.Length != 0) {
+        Uid = other.Uid;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Uid = input.ReadString();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyJoin_S2C : pb::IMessage<FamilyJoin_S2C> {
+    private static readonly pb::MessageParser<FamilyJoin_S2C> _parser = new pb::MessageParser<FamilyJoin_S2C>(() => new FamilyJoin_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyJoin_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[54]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyJoin_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyJoin_S2C(FamilyJoin_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      uid_ = other.uid_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyJoin_S2C Clone() {
+      return new FamilyJoin_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "uid" field.</summary>
+    public const int UidFieldNumber = 2;
+    private string uid_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Uid {
+      get { return uid_; }
+      set {
+        uid_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyJoin_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyJoin_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if (Uid != other.Uid) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      if (Uid.Length != 0) hash ^= Uid.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      if (Uid.Length != 0) {
+        output.WriteRawTag(18);
+        output.WriteString(Uid);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      if (Uid.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Uid);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyJoin_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      if (other.Uid.Length != 0) {
+        Uid = other.Uid;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            Uid = input.ReadString();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  /// 获取聊天信息,基于分页查询,默认显示最后一页
+  /// </summary>
+  public sealed partial class FamilyGetChat_C2S : pb::IMessage<FamilyGetChat_C2S> {
+    private static readonly pb::MessageParser<FamilyGetChat_C2S> _parser = new pb::MessageParser<FamilyGetChat_C2S>(() => new FamilyGetChat_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyGetChat_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[55]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetChat_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetChat_C2S(FamilyGetChat_C2S other) : this() {
+      start_ = other.start_;
+      limit_ = other.limit_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetChat_C2S Clone() {
+      return new FamilyGetChat_C2S(this);
+    }
+
+    /// <summary>Field number for the "start" field.</summary>
+    public const int StartFieldNumber = 1;
+    private int start_;
+    /// <summary>
+    ///  0是最后一页,1倒数第二页
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Start {
+      get { return start_; }
+      set {
+        start_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "limit" field.</summary>
+    public const int LimitFieldNumber = 2;
+    private int limit_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Limit {
+      get { return limit_; }
+      set {
+        limit_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyGetChat_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyGetChat_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Start != other.Start) return false;
+      if (Limit != other.Limit) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Start != 0) hash ^= Start.GetHashCode();
+      if (Limit != 0) hash ^= Limit.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Start != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Start);
+      }
+      if (Limit != 0) {
+        output.WriteRawTag(16);
+        output.WriteInt32(Limit);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Start != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Start);
+      }
+      if (Limit != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Limit);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyGetChat_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Start != 0) {
+        Start = other.Start;
+      }
+      if (other.Limit != 0) {
+        Limit = other.Limit;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Start = input.ReadInt32();
+            break;
+          }
+          case 16: {
+            Limit = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyGetChat_S2C : pb::IMessage<FamilyGetChat_S2C> {
+    private static readonly pb::MessageParser<FamilyGetChat_S2C> _parser = new pb::MessageParser<FamilyGetChat_S2C>(() => new FamilyGetChat_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyGetChat_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[56]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetChat_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetChat_S2C(FamilyGetChat_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      messages_ = other.messages_.Clone();
+      total_ = other.total_;
+      onlineCount_ = other.onlineCount_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetChat_S2C Clone() {
+      return new FamilyGetChat_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "messages" field.</summary>
+    public const int MessagesFieldNumber = 2;
+    private static readonly pb::FieldCodec<global::Protobuf.FamilyChatMsg> _repeated_messages_codec
+        = pb::FieldCodec.ForMessage(18, global::Protobuf.FamilyChatMsg.Parser);
+    private readonly pbc::RepeatedField<global::Protobuf.FamilyChatMsg> messages_ = new pbc::RepeatedField<global::Protobuf.FamilyChatMsg>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<global::Protobuf.FamilyChatMsg> Messages {
+      get { return messages_; }
+    }
+
+    /// <summary>Field number for the "total" field.</summary>
+    public const int TotalFieldNumber = 3;
+    private int total_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Total {
+      get { return total_; }
+      set {
+        total_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "onlineCount" field.</summary>
+    public const int OnlineCountFieldNumber = 4;
+    private int onlineCount_;
+    /// <summary>
+    ///  公会在线玩家数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int OnlineCount {
+      get { return onlineCount_; }
+      set {
+        onlineCount_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyGetChat_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyGetChat_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if(!messages_.Equals(other.messages_)) return false;
+      if (Total != other.Total) return false;
+      if (OnlineCount != other.OnlineCount) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      hash ^= messages_.GetHashCode();
+      if (Total != 0) hash ^= Total.GetHashCode();
+      if (OnlineCount != 0) hash ^= OnlineCount.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      messages_.WriteTo(output, _repeated_messages_codec);
+      if (Total != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(Total);
+      }
+      if (OnlineCount != 0) {
+        output.WriteRawTag(32);
+        output.WriteInt32(OnlineCount);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      size += messages_.CalculateSize(_repeated_messages_codec);
+      if (Total != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Total);
+      }
+      if (OnlineCount != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(OnlineCount);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyGetChat_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      messages_.Add(other.messages_);
+      if (other.Total != 0) {
+        Total = other.Total;
+      }
+      if (other.OnlineCount != 0) {
+        OnlineCount = other.OnlineCount;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            messages_.AddEntriesFrom(input, _repeated_messages_codec);
+            break;
+          }
+          case 24: {
+            Total = input.ReadInt32();
+            break;
+          }
+          case 32: {
+            OnlineCount = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  玩家发送聊天内容
+  /// </summary>
+  public sealed partial class FamilyStartChat_C2S : pb::IMessage<FamilyStartChat_C2S> {
+    private static readonly pb::MessageParser<FamilyStartChat_C2S> _parser = new pb::MessageParser<FamilyStartChat_C2S>(() => new FamilyStartChat_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyStartChat_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[57]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartChat_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartChat_C2S(FamilyStartChat_C2S other) : this() {
+      chatType_ = other.chatType_;
+      content_ = other.content_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartChat_C2S Clone() {
+      return new FamilyStartChat_C2S(this);
+    }
+
+    /// <summary>Field number for the "chatType" field.</summary>
+    public const int ChatTypeFieldNumber = 1;
+    private global::Protobuf.ChatType chatType_ = 0;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public global::Protobuf.ChatType ChatType {
+      get { return chatType_; }
+      set {
+        chatType_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "content" field.</summary>
+    public const int ContentFieldNumber = 2;
+    private string content_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Content {
+      get { return content_; }
+      set {
+        content_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyStartChat_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyStartChat_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (ChatType != other.ChatType) return false;
+      if (Content != other.Content) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (ChatType != 0) hash ^= ChatType.GetHashCode();
+      if (Content.Length != 0) hash ^= Content.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (ChatType != 0) {
+        output.WriteRawTag(8);
+        output.WriteEnum((int) ChatType);
+      }
+      if (Content.Length != 0) {
+        output.WriteRawTag(18);
+        output.WriteString(Content);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (ChatType != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ChatType);
+      }
+      if (Content.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Content);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyStartChat_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.ChatType != 0) {
+        ChatType = other.ChatType;
+      }
+      if (other.Content.Length != 0) {
+        Content = other.Content;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            chatType_ = (global::Protobuf.ChatType) input.ReadEnum();
+            break;
+          }
+          case 18: {
+            Content = input.ReadString();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  这个消息也会群发给其他玩家
+  /// </summary>
+  public sealed partial class FamilyStartChat_S2C : pb::IMessage<FamilyStartChat_S2C> {
+    private static readonly pb::MessageParser<FamilyStartChat_S2C> _parser = new pb::MessageParser<FamilyStartChat_S2C>(() => new FamilyStartChat_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyStartChat_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[58]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartChat_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartChat_S2C(FamilyStartChat_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      Message = other.message_ != null ? other.Message.Clone() : null;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartChat_S2C Clone() {
+      return new FamilyStartChat_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "message" field.</summary>
+    public const int MessageFieldNumber = 2;
+    private global::Protobuf.FamilyChatMsg message_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public global::Protobuf.FamilyChatMsg Message {
+      get { return message_; }
+      set {
+        message_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyStartChat_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyStartChat_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if (!object.Equals(Message, other.Message)) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      if (message_ != null) hash ^= Message.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      if (message_ != null) {
+        output.WriteRawTag(18);
+        output.WriteMessage(Message);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      if (message_ != null) {
+        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Message);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyStartChat_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      if (other.message_ != null) {
+        if (message_ == null) {
+          message_ = new global::Protobuf.FamilyChatMsg();
+        }
+        Message.MergeFrom(other.Message);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            if (message_ == null) {
+              message_ = new global::Protobuf.FamilyChatMsg();
+            }
+            input.ReadMessage(message_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  给一个玩家捐献一个宝石
+  /// </summary>
+  public sealed partial class FamilyStartDonate_C2S : pb::IMessage<FamilyStartDonate_C2S> {
+    private static readonly pb::MessageParser<FamilyStartDonate_C2S> _parser = new pb::MessageParser<FamilyStartDonate_C2S>(() => new FamilyStartDonate_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyStartDonate_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[59]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartDonate_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartDonate_C2S(FamilyStartDonate_C2S other) : this() {
+      messageId_ = other.messageId_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartDonate_C2S Clone() {
+      return new FamilyStartDonate_C2S(this);
+    }
+
+    /// <summary>Field number for the "messageId" field.</summary>
+    public const int MessageIdFieldNumber = 1;
+    private int messageId_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int MessageId {
+      get { return messageId_; }
+      set {
+        messageId_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyStartDonate_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyStartDonate_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (MessageId != other.MessageId) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (MessageId != 0) hash ^= MessageId.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (MessageId != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(MessageId);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (MessageId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(MessageId);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyStartDonate_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.MessageId != 0) {
+        MessageId = other.MessageId;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            MessageId = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  捐赠结果 这个消息也会群发给其他玩家
+  /// </summary>
+  public sealed partial class FamilyStartDonate_S2C : pb::IMessage<FamilyStartDonate_S2C> {
+    private static readonly pb::MessageParser<FamilyStartDonate_S2C> _parser = new pb::MessageParser<FamilyStartDonate_S2C>(() => new FamilyStartDonate_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyStartDonate_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[60]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartDonate_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartDonate_S2C(FamilyStartDonate_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      Message = other.message_ != null ? other.Message.Clone() : null;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyStartDonate_S2C Clone() {
+      return new FamilyStartDonate_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "message" field.</summary>
+    public const int MessageFieldNumber = 2;
+    private global::Protobuf.FamilyChatMsg message_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public global::Protobuf.FamilyChatMsg Message {
+      get { return message_; }
+      set {
+        message_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyStartDonate_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyStartDonate_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if (!object.Equals(Message, other.Message)) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      if (message_ != null) hash ^= Message.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      if (message_ != null) {
+        output.WriteRawTag(18);
+        output.WriteMessage(Message);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      if (message_ != null) {
+        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Message);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyStartDonate_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      if (other.message_ != null) {
+        if (message_ == null) {
+          message_ = new global::Protobuf.FamilyChatMsg();
+        }
+        Message.MergeFrom(other.Message);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            if (message_ == null) {
+              message_ = new global::Protobuf.FamilyChatMsg();
+            }
+            input.ReadMessage(message_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  退出工会
+  ///  如果是会长退出,服务器会指定一个新的会长
+  /// </summary>
+  public sealed partial class FamilyQuit_C2S : pb::IMessage<FamilyQuit_C2S> {
+    private static readonly pb::MessageParser<FamilyQuit_C2S> _parser = new pb::MessageParser<FamilyQuit_C2S>(() => new FamilyQuit_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyQuit_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[61]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyQuit_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyQuit_C2S(FamilyQuit_C2S other) : this() {
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyQuit_C2S Clone() {
+      return new FamilyQuit_C2S(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyQuit_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyQuit_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyQuit_C2S other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyQuit_S2C : pb::IMessage<FamilyQuit_S2C> {
+    private static readonly pb::MessageParser<FamilyQuit_S2C> _parser = new pb::MessageParser<FamilyQuit_S2C>(() => new FamilyQuit_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyQuit_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[62]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyQuit_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyQuit_S2C(FamilyQuit_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyQuit_S2C Clone() {
+      return new FamilyQuit_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyQuit_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyQuit_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyQuit_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  /// @{ 会长特有协议
+  ///  会长批准入会
+  /// </summary>
+  public sealed partial class FamilyAgreeJoin_C2S : pb::IMessage<FamilyAgreeJoin_C2S> {
+    private static readonly pb::MessageParser<FamilyAgreeJoin_C2S> _parser = new pb::MessageParser<FamilyAgreeJoin_C2S>(() => new FamilyAgreeJoin_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyAgreeJoin_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[63]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyAgreeJoin_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyAgreeJoin_C2S(FamilyAgreeJoin_C2S other) : this() {
+      messageId_ = other.messageId_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyAgreeJoin_C2S Clone() {
+      return new FamilyAgreeJoin_C2S(this);
+    }
+
+    /// <summary>Field number for the "messageId" field.</summary>
+    public const int MessageIdFieldNumber = 1;
+    private int messageId_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int MessageId {
+      get { return messageId_; }
+      set {
+        messageId_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyAgreeJoin_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyAgreeJoin_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (MessageId != other.MessageId) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (MessageId != 0) hash ^= MessageId.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (MessageId != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(MessageId);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (MessageId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(MessageId);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyAgreeJoin_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.MessageId != 0) {
+        MessageId = other.MessageId;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            MessageId = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyAgreeJoin_S2C : pb::IMessage<FamilyAgreeJoin_S2C> {
+    private static readonly pb::MessageParser<FamilyAgreeJoin_S2C> _parser = new pb::MessageParser<FamilyAgreeJoin_S2C>(() => new FamilyAgreeJoin_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyAgreeJoin_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[64]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyAgreeJoin_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyAgreeJoin_S2C(FamilyAgreeJoin_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      NewMember = other.newMember_ != null ? other.NewMember.Clone() : null;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyAgreeJoin_S2C Clone() {
+      return new FamilyAgreeJoin_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "newMember" field.</summary>
+    public const int NewMemberFieldNumber = 2;
+    private global::Protobuf.FamilyMemberMsg newMember_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public global::Protobuf.FamilyMemberMsg NewMember {
+      get { return newMember_; }
+      set {
+        newMember_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyAgreeJoin_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyAgreeJoin_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if (!object.Equals(NewMember, other.NewMember)) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      if (newMember_ != null) hash ^= NewMember.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      if (newMember_ != null) {
+        output.WriteRawTag(18);
+        output.WriteMessage(NewMember);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      if (newMember_ != null) {
+        size += 1 + pb::CodedOutputStream.ComputeMessageSize(NewMember);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyAgreeJoin_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      if (other.newMember_ != null) {
+        if (newMember_ == null) {
+          newMember_ = new global::Protobuf.FamilyMemberMsg();
+        }
+        NewMember.MergeFrom(other.NewMember);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            if (newMember_ == null) {
+              newMember_ = new global::Protobuf.FamilyMemberMsg();
+            }
+            input.ReadMessage(newMember_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  踢出会员
+  /// </summary>
+  public sealed partial class FamilyKickUser_C2S : pb::IMessage<FamilyKickUser_C2S> {
+    private static readonly pb::MessageParser<FamilyKickUser_C2S> _parser = new pb::MessageParser<FamilyKickUser_C2S>(() => new FamilyKickUser_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyKickUser_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[65]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyKickUser_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyKickUser_C2S(FamilyKickUser_C2S other) : this() {
+      username_ = other.username_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyKickUser_C2S Clone() {
+      return new FamilyKickUser_C2S(this);
+    }
+
+    /// <summary>Field number for the "username" field.</summary>
+    public const int UsernameFieldNumber = 1;
+    private string username_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Username {
+      get { return username_; }
+      set {
+        username_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyKickUser_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyKickUser_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Username != other.Username) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Username.Length != 0) hash ^= Username.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Username.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Username);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Username.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Username);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyKickUser_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Username.Length != 0) {
+        Username = other.Username;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Username = input.ReadString();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyKickUser_S2C : pb::IMessage<FamilyKickUser_S2C> {
+    private static readonly pb::MessageParser<FamilyKickUser_S2C> _parser = new pb::MessageParser<FamilyKickUser_S2C>(() => new FamilyKickUser_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyKickUser_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[66]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyKickUser_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyKickUser_S2C(FamilyKickUser_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyKickUser_S2C Clone() {
+      return new FamilyKickUser_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyKickUser_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyKickUser_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyKickUser_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  转让会长
+  /// </summary>
+  public sealed partial class FamilyTransLeader_C2S : pb::IMessage<FamilyTransLeader_C2S> {
+    private static readonly pb::MessageParser<FamilyTransLeader_C2S> _parser = new pb::MessageParser<FamilyTransLeader_C2S>(() => new FamilyTransLeader_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyTransLeader_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[67]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyTransLeader_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyTransLeader_C2S(FamilyTransLeader_C2S other) : this() {
+      username_ = other.username_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyTransLeader_C2S Clone() {
+      return new FamilyTransLeader_C2S(this);
+    }
+
+    /// <summary>Field number for the "username" field.</summary>
+    public const int UsernameFieldNumber = 1;
+    private string username_ = "";
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public string Username {
+      get { return username_; }
+      set {
+        username_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyTransLeader_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyTransLeader_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Username != other.Username) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Username.Length != 0) hash ^= Username.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Username.Length != 0) {
+        output.WriteRawTag(10);
+        output.WriteString(Username);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Username.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(Username);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyTransLeader_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Username.Length != 0) {
+        Username = other.Username;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 10: {
+            Username = input.ReadString();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyTransLeader_S2C : pb::IMessage<FamilyTransLeader_S2C> {
+    private static readonly pb::MessageParser<FamilyTransLeader_S2C> _parser = new pb::MessageParser<FamilyTransLeader_S2C>(() => new FamilyTransLeader_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyTransLeader_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[68]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyTransLeader_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyTransLeader_S2C(FamilyTransLeader_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyTransLeader_S2C Clone() {
+      return new FamilyTransLeader_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyTransLeader_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyTransLeader_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyTransLeader_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  /// @ 工会商店(使用工会捐献积分兑换,所有人都有权限)
+  ///  获取捐赠商店列表
+  /// </summary>
+  public sealed partial class FamilyGetDonateShop_C2S : pb::IMessage<FamilyGetDonateShop_C2S> {
+    private static readonly pb::MessageParser<FamilyGetDonateShop_C2S> _parser = new pb::MessageParser<FamilyGetDonateShop_C2S>(() => new FamilyGetDonateShop_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyGetDonateShop_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[69]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetDonateShop_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetDonateShop_C2S(FamilyGetDonateShop_C2S other) : this() {
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetDonateShop_C2S Clone() {
+      return new FamilyGetDonateShop_C2S(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyGetDonateShop_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyGetDonateShop_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyGetDonateShop_C2S other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyGetDonateShop_S2C : pb::IMessage<FamilyGetDonateShop_S2C> {
+    private static readonly pb::MessageParser<FamilyGetDonateShop_S2C> _parser = new pb::MessageParser<FamilyGetDonateShop_S2C>(() => new FamilyGetDonateShop_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyGetDonateShop_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[70]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetDonateShop_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetDonateShop_S2C(FamilyGetDonateShop_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      items_ = other.items_.Clone();
+      expireTime_ = other.expireTime_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetDonateShop_S2C Clone() {
+      return new FamilyGetDonateShop_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "items" field.</summary>
+    public const int ItemsFieldNumber = 2;
+    private static readonly pb::FieldCodec<global::Protobuf.StoreItemMsg> _repeated_items_codec
+        = pb::FieldCodec.ForMessage(18, global::Protobuf.StoreItemMsg.Parser);
+    private readonly pbc::RepeatedField<global::Protobuf.StoreItemMsg> items_ = new pbc::RepeatedField<global::Protobuf.StoreItemMsg>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<global::Protobuf.StoreItemMsg> Items {
+      get { return items_; }
+    }
+
+    /// <summary>Field number for the "expireTime" field.</summary>
+    public const int ExpireTimeFieldNumber = 3;
+    private int expireTime_;
+    /// <summary>
+    /// !下次刷新时间,UNIX时间戳,单位秒
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ExpireTime {
+      get { return expireTime_; }
+      set {
+        expireTime_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyGetDonateShop_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyGetDonateShop_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if(!items_.Equals(other.items_)) return false;
+      if (ExpireTime != other.ExpireTime) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      hash ^= items_.GetHashCode();
+      if (ExpireTime != 0) hash ^= ExpireTime.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      items_.WriteTo(output, _repeated_items_codec);
+      if (ExpireTime != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(ExpireTime);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      size += items_.CalculateSize(_repeated_items_codec);
+      if (ExpireTime != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ExpireTime);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyGetDonateShop_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      items_.Add(other.items_);
+      if (other.ExpireTime != 0) {
+        ExpireTime = other.ExpireTime;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            items_.AddEntriesFrom(input, _repeated_items_codec);
+            break;
+          }
+          case 24: {
+            ExpireTime = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  购买捐赠商城物品
+  /// </summary>
+  public sealed partial class FamilyBuyDonateShop_C2S : pb::IMessage<FamilyBuyDonateShop_C2S> {
+    private static readonly pb::MessageParser<FamilyBuyDonateShop_C2S> _parser = new pb::MessageParser<FamilyBuyDonateShop_C2S>(() => new FamilyBuyDonateShop_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyBuyDonateShop_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[71]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyDonateShop_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyDonateShop_C2S(FamilyBuyDonateShop_C2S other) : this() {
+      donateshopId_ = other.donateshopId_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyDonateShop_C2S Clone() {
+      return new FamilyBuyDonateShop_C2S(this);
+    }
+
+    /// <summary>Field number for the "donateshopId" field.</summary>
+    public const int DonateshopIdFieldNumber = 1;
+    private int donateshopId_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int DonateshopId {
+      get { return donateshopId_; }
+      set {
+        donateshopId_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyBuyDonateShop_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyBuyDonateShop_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (DonateshopId != other.DonateshopId) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (DonateshopId != 0) hash ^= DonateshopId.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (DonateshopId != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(DonateshopId);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (DonateshopId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(DonateshopId);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyBuyDonateShop_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.DonateshopId != 0) {
+        DonateshopId = other.DonateshopId;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            DonateshopId = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyBuyDonateShop_S2C : pb::IMessage<FamilyBuyDonateShop_S2C> {
+    private static readonly pb::MessageParser<FamilyBuyDonateShop_S2C> _parser = new pb::MessageParser<FamilyBuyDonateShop_S2C>(() => new FamilyBuyDonateShop_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyBuyDonateShop_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[72]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyDonateShop_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyDonateShop_S2C(FamilyBuyDonateShop_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      donateshopId_ = other.donateshopId_;
+      curitems_ = other.curitems_.Clone();
+      buyCount_ = other.buyCount_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyDonateShop_S2C Clone() {
+      return new FamilyBuyDonateShop_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "donateshopId" field.</summary>
+    public const int DonateshopIdFieldNumber = 2;
+    private int donateshopId_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int DonateshopId {
+      get { return donateshopId_; }
+      set {
+        donateshopId_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "curitems" field.</summary>
+    public const int CuritemsFieldNumber = 3;
+    private static readonly pb::FieldCodec<global::Protobuf.RewardItemMsg> _repeated_curitems_codec
+        = pb::FieldCodec.ForMessage(26, global::Protobuf.RewardItemMsg.Parser);
+    private readonly pbc::RepeatedField<global::Protobuf.RewardItemMsg> curitems_ = new pbc::RepeatedField<global::Protobuf.RewardItemMsg>();
+    /// <summary>
+    ///  消费后的当前值
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<global::Protobuf.RewardItemMsg> Curitems {
+      get { return curitems_; }
+    }
+
+    /// <summary>Field number for the "buyCount" field.</summary>
+    public const int BuyCountFieldNumber = 4;
+    private int buyCount_;
+    /// <summary>
+    ///  当前的购买次数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int BuyCount {
+      get { return buyCount_; }
+      set {
+        buyCount_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyBuyDonateShop_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyBuyDonateShop_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if (DonateshopId != other.DonateshopId) return false;
+      if(!curitems_.Equals(other.curitems_)) return false;
+      if (BuyCount != other.BuyCount) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      if (DonateshopId != 0) hash ^= DonateshopId.GetHashCode();
+      hash ^= curitems_.GetHashCode();
+      if (BuyCount != 0) hash ^= BuyCount.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      if (DonateshopId != 0) {
+        output.WriteRawTag(16);
+        output.WriteInt32(DonateshopId);
+      }
+      curitems_.WriteTo(output, _repeated_curitems_codec);
+      if (BuyCount != 0) {
+        output.WriteRawTag(32);
+        output.WriteInt32(BuyCount);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      if (DonateshopId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(DonateshopId);
+      }
+      size += curitems_.CalculateSize(_repeated_curitems_codec);
+      if (BuyCount != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(BuyCount);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyBuyDonateShop_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      if (other.DonateshopId != 0) {
+        DonateshopId = other.DonateshopId;
+      }
+      curitems_.Add(other.curitems_);
+      if (other.BuyCount != 0) {
+        BuyCount = other.BuyCount;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 16: {
+            DonateshopId = input.ReadInt32();
+            break;
+          }
+          case 26: {
+            curitems_.AddEntriesFrom(input, _repeated_curitems_codec);
+            break;
+          }
+          case 32: {
+            BuyCount = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  获取积分商店物品列表
+  /// </summary>
+  public sealed partial class FamilyGetScoreShop_C2S : pb::IMessage<FamilyGetScoreShop_C2S> {
+    private static readonly pb::MessageParser<FamilyGetScoreShop_C2S> _parser = new pb::MessageParser<FamilyGetScoreShop_C2S>(() => new FamilyGetScoreShop_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyGetScoreShop_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[73]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetScoreShop_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetScoreShop_C2S(FamilyGetScoreShop_C2S other) : this() {
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetScoreShop_C2S Clone() {
+      return new FamilyGetScoreShop_C2S(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyGetScoreShop_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyGetScoreShop_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyGetScoreShop_C2S other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyGetScoreShop_S2C : pb::IMessage<FamilyGetScoreShop_S2C> {
+    private static readonly pb::MessageParser<FamilyGetScoreShop_S2C> _parser = new pb::MessageParser<FamilyGetScoreShop_S2C>(() => new FamilyGetScoreShop_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyGetScoreShop_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[74]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetScoreShop_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetScoreShop_S2C(FamilyGetScoreShop_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      items_ = other.items_.Clone();
+      expireTime_ = other.expireTime_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyGetScoreShop_S2C Clone() {
+      return new FamilyGetScoreShop_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "items" field.</summary>
+    public const int ItemsFieldNumber = 2;
+    private static readonly pb::FieldCodec<global::Protobuf.StoreItemMsg> _repeated_items_codec
+        = pb::FieldCodec.ForMessage(18, global::Protobuf.StoreItemMsg.Parser);
+    private readonly pbc::RepeatedField<global::Protobuf.StoreItemMsg> items_ = new pbc::RepeatedField<global::Protobuf.StoreItemMsg>();
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public pbc::RepeatedField<global::Protobuf.StoreItemMsg> Items {
+      get { return items_; }
+    }
+
+    /// <summary>Field number for the "expireTime" field.</summary>
+    public const int ExpireTimeFieldNumber = 3;
+    private int expireTime_;
+    /// <summary>
+    /// !下次刷新时间,UNIX时间戳,单位秒
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ExpireTime {
+      get { return expireTime_; }
+      set {
+        expireTime_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyGetScoreShop_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyGetScoreShop_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if(!items_.Equals(other.items_)) return false;
+      if (ExpireTime != other.ExpireTime) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      hash ^= items_.GetHashCode();
+      if (ExpireTime != 0) hash ^= ExpireTime.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      items_.WriteTo(output, _repeated_items_codec);
+      if (ExpireTime != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(ExpireTime);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      size += items_.CalculateSize(_repeated_items_codec);
+      if (ExpireTime != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ExpireTime);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyGetScoreShop_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      items_.Add(other.items_);
+      if (other.ExpireTime != 0) {
+        ExpireTime = other.ExpireTime;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 18: {
+            items_.AddEntriesFrom(input, _repeated_items_codec);
+            break;
+          }
+          case 24: {
+            ExpireTime = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  /// <summary>
+  ///  购买积分商城物品
+  /// </summary>
+  public sealed partial class FamilyBuyScoreShop_C2S : pb::IMessage<FamilyBuyScoreShop_C2S> {
+    private static readonly pb::MessageParser<FamilyBuyScoreShop_C2S> _parser = new pb::MessageParser<FamilyBuyScoreShop_C2S>(() => new FamilyBuyScoreShop_C2S());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyBuyScoreShop_C2S> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[75]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyScoreShop_C2S() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyScoreShop_C2S(FamilyBuyScoreShop_C2S other) : this() {
+      scoreshopId_ = other.scoreshopId_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyScoreShop_C2S Clone() {
+      return new FamilyBuyScoreShop_C2S(this);
+    }
+
+    /// <summary>Field number for the "scoreshopId" field.</summary>
+    public const int ScoreshopIdFieldNumber = 1;
+    private int scoreshopId_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ScoreshopId {
+      get { return scoreshopId_; }
+      set {
+        scoreshopId_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyBuyScoreShop_C2S);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyBuyScoreShop_C2S other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (ScoreshopId != other.ScoreshopId) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (ScoreshopId != 0) hash ^= ScoreshopId.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (ScoreshopId != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(ScoreshopId);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (ScoreshopId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScoreshopId);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyBuyScoreShop_C2S other) {
+      if (other == null) {
+        return;
+      }
+      if (other.ScoreshopId != 0) {
+        ScoreshopId = other.ScoreshopId;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            ScoreshopId = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  public sealed partial class FamilyBuyScoreShop_S2C : pb::IMessage<FamilyBuyScoreShop_S2C> {
+    private static readonly pb::MessageParser<FamilyBuyScoreShop_S2C> _parser = new pb::MessageParser<FamilyBuyScoreShop_S2C>(() => new FamilyBuyScoreShop_S2C());
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pb::MessageParser<FamilyBuyScoreShop_S2C> Parser { get { return _parser; } }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::Protobuf.GameReflection.Descriptor.MessageTypes[76]; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyScoreShop_S2C() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyScoreShop_S2C(FamilyBuyScoreShop_S2C other) : this() {
+      errorcode_ = other.errorcode_;
+      scoreshopId_ = other.scoreshopId_;
+      scoreshopExpired_ = other.scoreshopExpired_;
+      familyScore_ = other.familyScore_;
+      buyCount_ = other.buyCount_;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public FamilyBuyScoreShop_S2C Clone() {
+      return new FamilyBuyScoreShop_S2C(this);
+    }
+
+    /// <summary>Field number for the "errorcode" field.</summary>
+    public const int ErrorcodeFieldNumber = 1;
+    private int errorcode_;
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int Errorcode {
+      get { return errorcode_; }
+      set {
+        errorcode_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "scoreshopId" field.</summary>
+    public const int ScoreshopIdFieldNumber = 2;
+    private int scoreshopId_;
+    /// <summary>
+    /// ! 这个2个字段,复制到工会结构体里面
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ScoreshopId {
+      get { return scoreshopId_; }
+      set {
+        scoreshopId_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "scoreshopExpired" field.</summary>
+    public const int ScoreshopExpiredFieldNumber = 3;
+    private int scoreshopExpired_;
+    /// <summary>
+    /// ! 注意,这个是不积分商店刷新时间,这个是新的BUF过期时间戳.单位秒
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int ScoreshopExpired {
+      get { return scoreshopExpired_; }
+      set {
+        scoreshopExpired_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "familyScore" field.</summary>
+    public const int FamilyScoreFieldNumber = 4;
+    private int familyScore_;
+    /// <summary>
+    /// !当前的工会积分
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int FamilyScore {
+      get { return familyScore_; }
+      set {
+        familyScore_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "buyCount" field.</summary>
+    public const int BuyCountFieldNumber = 5;
+    private int buyCount_;
+    /// <summary>
+    /// ! 当前的购买次数
+    /// </summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int BuyCount {
+      get { return buyCount_; }
+      set {
+        buyCount_ = value;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override bool Equals(object other) {
+      return Equals(other as FamilyBuyScoreShop_S2C);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public bool Equals(FamilyBuyScoreShop_S2C other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Errorcode != other.Errorcode) return false;
+      if (ScoreshopId != other.ScoreshopId) return false;
+      if (ScoreshopExpired != other.ScoreshopExpired) return false;
+      if (FamilyScore != other.FamilyScore) return false;
+      if (BuyCount != other.BuyCount) return false;
+      return true;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Errorcode != 0) hash ^= Errorcode.GetHashCode();
+      if (ScoreshopId != 0) hash ^= ScoreshopId.GetHashCode();
+      if (ScoreshopExpired != 0) hash ^= ScoreshopExpired.GetHashCode();
+      if (FamilyScore != 0) hash ^= FamilyScore.GetHashCode();
+      if (BuyCount != 0) hash ^= BuyCount.GetHashCode();
+      return hash;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Errorcode != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Errorcode);
+      }
+      if (ScoreshopId != 0) {
+        output.WriteRawTag(16);
+        output.WriteInt32(ScoreshopId);
+      }
+      if (ScoreshopExpired != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(ScoreshopExpired);
+      }
+      if (FamilyScore != 0) {
+        output.WriteRawTag(32);
+        output.WriteInt32(FamilyScore);
+      }
+      if (BuyCount != 0) {
+        output.WriteRawTag(40);
+        output.WriteInt32(BuyCount);
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public int CalculateSize() {
+      int size = 0;
+      if (Errorcode != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Errorcode);
+      }
+      if (ScoreshopId != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScoreshopId);
+      }
+      if (ScoreshopExpired != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(ScoreshopExpired);
+      }
+      if (FamilyScore != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(FamilyScore);
+      }
+      if (BuyCount != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(BuyCount);
+      }
+      return size;
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(FamilyBuyScoreShop_S2C other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Errorcode != 0) {
+        Errorcode = other.Errorcode;
+      }
+      if (other.ScoreshopId != 0) {
+        ScoreshopId = other.ScoreshopId;
+      }
+      if (other.ScoreshopExpired != 0) {
+        ScoreshopExpired = other.ScoreshopExpired;
+      }
+      if (other.FamilyScore != 0) {
+        FamilyScore = other.FamilyScore;
+      }
+      if (other.BuyCount != 0) {
+        BuyCount = other.BuyCount;
+      }
+    }
+
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Errorcode = input.ReadInt32();
+            break;
+          }
+          case 16: {
+            ScoreshopId = input.ReadInt32();
+            break;
+          }
+          case 24: {
+            ScoreshopExpired = input.ReadInt32();
+            break;
+          }
+          case 32: {
+            FamilyScore = input.ReadInt32();
+            break;
+          }
+          case 40: {
+            BuyCount = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
   #endregion
 
 }
diff --git a/Assets/Scripts/Net/NetExtends/NetMapping.cs b/Assets/Scripts/Net/NetExtends/NetMapping.cs
index d64bdfd..8ad8316 100644
--- a/Assets/Scripts/Net/NetExtends/NetMapping.cs
+++ b/Assets/Scripts/Net/NetExtends/NetMapping.cs
@@ -118,6 +118,62 @@
             
             NetMapping.packetReflections.Add((Opcode)2049, typeof(TakeArenaBox_S2C));
             
+            NetMapping.packetReflections.Add((Opcode)2050, typeof(FamilySearch_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2051, typeof(FamilySearch_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2052, typeof(FamilyPlayerOnline_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2053, typeof(FamilyCreate_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2054, typeof(FamilyJoin_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2055, typeof(FamilyJoin_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2056, typeof(FamilyGetChat_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2057, typeof(FamilyGetChat_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2058, typeof(FamilyStartChat_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2059, typeof(FamilyStartChat_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2060, typeof(FamilyStartDonate_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2061, typeof(FamilyStartDonate_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2062, typeof(FamilyQuit_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2063, typeof(FamilyQuit_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2064, typeof(FamilyAgreeJoin_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2065, typeof(FamilyAgreeJoin_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2066, typeof(FamilyKickUser_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2067, typeof(FamilyKickUser_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2068, typeof(FamilyTransLeader_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2069, typeof(FamilyTransLeader_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2070, typeof(FamilyGetDonateShop_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2071, typeof(FamilyGetDonateShop_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2072, typeof(FamilyBuyDonateShop_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2073, typeof(FamilyBuyDonateShop_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2074, typeof(FamilyGetScoreShop_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2075, typeof(FamilyGetScoreShop_S2C));
+            
+            NetMapping.packetReflections.Add((Opcode)2076, typeof(FamilyBuyScoreShop_C2S));
+            
+            NetMapping.packetReflections.Add((Opcode)2077, typeof(FamilyBuyScoreShop_S2C));
+            
 
             
 
diff --git a/Assets/Scripts/Net/NetExtends/Opcode.cs b/Assets/Scripts/Net/NetExtends/Opcode.cs
index 76a6d47..fb57285 100644
--- a/Assets/Scripts/Net/NetExtends/Opcode.cs
+++ b/Assets/Scripts/Net/NetExtends/Opcode.cs
@@ -22,7 +22,7 @@
     static OpcodeReflection() {
       byte[] descriptorData = global::System.Convert.FromBase64String(
           string.Concat(
-            "CgxvcGNvZGUucHJvdG8SCHByb3RvYnVmKq0JCgZPcGNvZGUSCQoFQmVnaW4Q",
+            "CgxvcGNvZGUucHJvdG8SCHByb3RvYnVmKokPCgZPcGNvZGUSCQoFQmVnaW4Q",
             "ABIOCglMb2dpbl9DMlMQ0Q8SDgoJTG9naW5fUzJDENIPEhUKEFNldEdlbURl",
             "Y2tJZF9DMlMQ0w8SFQoQU2V0R2VtRGVja0lkX1MyQxDUDxIUCg9Nb3ZlR2Vt",
             "RGVja19DMlMQ1Q8SFAoPTW92ZUdlbURlY2tfUzJDENYPEhIKDUdNQ29tbWFu",
@@ -49,7 +49,23 @@
             "dGxlUGFzc0xldmVsX0MyUxD8DxIbChZCdXlCYXR0bGVQYXNzTGV2ZWxfUzJD",
             "EP0PEhcKElVuTG9ja0FyZW5hQm94X0MyUxD+DxIXChJVbkxvY2tBcmVuYUJv",
             "eF9TMkMQ/w8SFQoQVGFrZUFyZW5hQm94X0MyUxCAEBIVChBUYWtlQXJlbmFC",
-            "b3hfUzJDEIEQYgZwcm90bzM="));
+            "b3hfUzJDEIEQEhUKEEZhbWlseVNlYXJjaF9DMlMQghASFQoQRmFtaWx5U2Vh",
+            "cmNoX1MyQxCDEBIbChZGYW1pbHlQbGF5ZXJPbmxpbmVfUzJDEIQQEhUKEEZh",
+            "bWlseUNyZWF0ZV9DMlMQhRASEwoORmFtaWx5Sm9pbl9DMlMQhhASEwoORmFt",
+            "aWx5Sm9pbl9TMkMQhxASFgoRRmFtaWx5R2V0Q2hhdF9DMlMQiBASFgoRRmFt",
+            "aWx5R2V0Q2hhdF9TMkMQiRASGAoTRmFtaWx5U3RhcnRDaGF0X0MyUxCKEBIY",
+            "ChNGYW1pbHlTdGFydENoYXRfUzJDEIsQEhoKFUZhbWlseVN0YXJ0RG9uYXRl",
+            "X0MyUxCMEBIaChVGYW1pbHlTdGFydERvbmF0ZV9TMkMQjRASEwoORmFtaWx5",
+            "UXVpdF9DMlMQjhASEwoORmFtaWx5UXVpdF9TMkMQjxASGAoTRmFtaWx5QWdy",
+            "ZWVKb2luX0MyUxCQEBIYChNGYW1pbHlBZ3JlZUpvaW5fUzJDEJEQEhcKEkZh",
+            "bWlseUtpY2tVc2VyX0MyUxCSEBIXChJGYW1pbHlLaWNrVXNlcl9TMkMQkxAS",
+            "GgoVRmFtaWx5VHJhbnNMZWFkZXJfQzJTEJQQEhoKFUZhbWlseVRyYW5zTGVh",
+            "ZGVyX1MyQxCVEBIcChdGYW1pbHlHZXREb25hdGVTaG9wX0MyUxCWEBIcChdG",
+            "YW1pbHlHZXREb25hdGVTaG9wX1MyQxCXEBIcChdGYW1pbHlCdXlEb25hdGVT",
+            "aG9wX0MyUxCYEBIcChdGYW1pbHlCdXlEb25hdGVTaG9wX1MyQxCZEBIbChZG",
+            "YW1pbHlHZXRTY29yZVNob3BfQzJTEJoQEhsKFkZhbWlseUdldFNjb3JlU2hv",
+            "cF9TMkMQmxASGwoWRmFtaWx5QnV5U2NvcmVTaG9wX0MyUxCcEBIbChZGYW1p",
+            "bHlCdXlTY29yZVNob3BfUzJDEJ0QYgZwcm90bzM="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
           new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Protobuf.Opcode), }, null));
@@ -109,6 +125,34 @@
     [pbr::OriginalName("UnLockArenaBox_S2C")] UnLockArenaBoxS2C = 2047,
     [pbr::OriginalName("TakeArenaBox_C2S")] TakeArenaBoxC2S = 2048,
     [pbr::OriginalName("TakeArenaBox_S2C")] TakeArenaBoxS2C = 2049,
+    [pbr::OriginalName("FamilySearch_C2S")] FamilySearchC2S = 2050,
+    [pbr::OriginalName("FamilySearch_S2C")] FamilySearchS2C = 2051,
+    [pbr::OriginalName("FamilyPlayerOnline_S2C")] FamilyPlayerOnlineS2C = 2052,
+    [pbr::OriginalName("FamilyCreate_C2S")] FamilyCreateC2S = 2053,
+    [pbr::OriginalName("FamilyJoin_C2S")] FamilyJoinC2S = 2054,
+    [pbr::OriginalName("FamilyJoin_S2C")] FamilyJoinS2C = 2055,
+    [pbr::OriginalName("FamilyGetChat_C2S")] FamilyGetChatC2S = 2056,
+    [pbr::OriginalName("FamilyGetChat_S2C")] FamilyGetChatS2C = 2057,
+    [pbr::OriginalName("FamilyStartChat_C2S")] FamilyStartChatC2S = 2058,
+    [pbr::OriginalName("FamilyStartChat_S2C")] FamilyStartChatS2C = 2059,
+    [pbr::OriginalName("FamilyStartDonate_C2S")] FamilyStartDonateC2S = 2060,
+    [pbr::OriginalName("FamilyStartDonate_S2C")] FamilyStartDonateS2C = 2061,
+    [pbr::OriginalName("FamilyQuit_C2S")] FamilyQuitC2S = 2062,
+    [pbr::OriginalName("FamilyQuit_S2C")] FamilyQuitS2C = 2063,
+    [pbr::OriginalName("FamilyAgreeJoin_C2S")] FamilyAgreeJoinC2S = 2064,
+    [pbr::OriginalName("FamilyAgreeJoin_S2C")] FamilyAgreeJoinS2C = 2065,
+    [pbr::OriginalName("FamilyKickUser_C2S")] FamilyKickUserC2S = 2066,
+    [pbr::OriginalName("FamilyKickUser_S2C")] FamilyKickUserS2C = 2067,
+    [pbr::OriginalName("FamilyTransLeader_C2S")] FamilyTransLeaderC2S = 2068,
+    [pbr::OriginalName("FamilyTransLeader_S2C")] FamilyTransLeaderS2C = 2069,
+    [pbr::OriginalName("FamilyGetDonateShop_C2S")] FamilyGetDonateShopC2S = 2070,
+    [pbr::OriginalName("FamilyGetDonateShop_S2C")] FamilyGetDonateShopS2C = 2071,
+    [pbr::OriginalName("FamilyBuyDonateShop_C2S")] FamilyBuyDonateShopC2S = 2072,
+    [pbr::OriginalName("FamilyBuyDonateShop_S2C")] FamilyBuyDonateShopS2C = 2073,
+    [pbr::OriginalName("FamilyGetScoreShop_C2S")] FamilyGetScoreShopC2S = 2074,
+    [pbr::OriginalName("FamilyGetScoreShop_S2C")] FamilyGetScoreShopS2C = 2075,
+    [pbr::OriginalName("FamilyBuyScoreShop_C2S")] FamilyBuyScoreShopC2S = 2076,
+    [pbr::OriginalName("FamilyBuyScoreShop_S2C")] FamilyBuyScoreShopS2C = 2077,
   }
 
   #endregion
diff --git a/Assets/Scripts/Net/NetExtends/Table.cs b/Assets/Scripts/Net/NetExtends/Table.cs
index 9df6259..4d8d902 100644
--- a/Assets/Scripts/Net/NetExtends/Table.cs
+++ b/Assets/Scripts/Net/NetExtends/Table.cs
@@ -42,11 +42,14 @@
             "endless_buff.json",
             "endless_enemy.json",
             "endless_port.json",
+            "scoreshop.json",
+            "donateshop.json",
             "gemcost.json",
             "buffinfo.json",
             "skilllevelinfo.json",
             "arena.json",
             "fuckword.json",
+            "notice.json",
             "storearea.json",
             "store.json",
             "goldInfo.json",
@@ -200,6 +203,28 @@
                     break;
                
             
+                case "scoreshop":
+                    //allData.Clear();
+                    foreach (JsonData item in data)
+                    {
+                        scoreshop tmp = scoreshop.CreateFromJson(item);
+                        allData.Add(tmp as tabledata);
+                    }
+                    JsonDataCenter.allData.Add(tablename, allData);
+                    break;
+               
+            
+                case "donateshop":
+                    //allData.Clear();
+                    foreach (JsonData item in data)
+                    {
+                        donateshop tmp = donateshop.CreateFromJson(item);
+                        allData.Add(tmp as tabledata);
+                    }
+                    JsonDataCenter.allData.Add(tablename, allData);
+                    break;
+               
+            
                 case "gemcost":
                     //allData.Clear();
                     foreach (JsonData item in data)
@@ -249,6 +274,17 @@
                     foreach (JsonData item in data)
                     {
                         fuckword tmp = fuckword.CreateFromJson(item);
+                        allData.Add(tmp as tabledata);
+                    }
+                    JsonDataCenter.allData.Add(tablename, allData);
+                    break;
+               
+            
+                case "notice":
+                    //allData.Clear();
+                    foreach (JsonData item in data)
+                    {
+                        notice tmp = notice.CreateFromJson(item);
                         allData.Add(tmp as tabledata);
                     }
                     JsonDataCenter.allData.Add(tablename, allData);
@@ -805,6 +841,12 @@
         // 出现关卡上限
         public int upper_level;
         
+        // 对应资源
+        public int image;
+        
+        // 品质
+        public int rare;
+        
 
 
         public static endless_buff CreateFromJson(JsonData item)
@@ -820,6 +862,8 @@
             _endless_buff.brief = GameUtils.GetString(item[index++].ToString()); 
             _endless_buff.down_level = int.Parse(GameUtils.GetString(item[index++].ToString())); 
             _endless_buff.upper_level = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _endless_buff.image = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _endless_buff.rare = int.Parse(GameUtils.GetString(item[index++].ToString())); 
             
             return _endless_buff;
         }
@@ -842,7 +886,7 @@
         public int type;
         
         // 血量增幅
-        public int hp_rate;
+        public float hp_rate;
         
         // 速度增幅
         public float speed_rate;
@@ -863,7 +907,7 @@
             _endless_enemy.id = int.Parse(GameUtils.GetString(item[index++].ToString())); 
             _endless_enemy.name = GameUtils.GetString(item[index++].ToString()); 
             _endless_enemy.type = int.Parse(GameUtils.GetString(item[index++].ToString())); 
-            _endless_enemy.hp_rate = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _endless_enemy.hp_rate = float.Parse(GameUtils.GetString(item[index++].ToString())); 
             _endless_enemy.speed_rate = float.Parse(GameUtils.GetString(item[index++].ToString())); 
             _endless_enemy.coin_rate = int.Parse(GameUtils.GetString(item[index++].ToString())); 
             _endless_enemy.resource = int.Parse(GameUtils.GetString(item[index++].ToString())); 
@@ -916,10 +960,10 @@
         public int cooldown;
         
         // 怪物掉落
-        public reward drop;
+        public List<reward> drop;
         
         // 掉落概率
-        public int drop_rate;
+        public List<int> drop_rate;
         
 
 
@@ -940,10 +984,104 @@
             _endless_port.b_speed = float.Parse(GameUtils.GetString(item[index++].ToString())); 
             _endless_port.b_coin = int.Parse(GameUtils.GetString(item[index++].ToString())); 
             _endless_port.cooldown = int.Parse(GameUtils.GetString(item[index++].ToString())); 
-            _endless_port.drop = GameUtils.GetReward(item[index++]); 
-            _endless_port.drop_rate = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _endless_port.drop = GameUtils.GetRewardList(item[index++]); 
+            _endless_port.drop_rate = GameUtils.GetIntList(item[index++]); 
             
             return _endless_port;
+        }
+
+    }
+
+    //! 生成文件 G_公会积分商店.xlsx
+    public class scoreshop : tabledata {
+        public int getid(){
+            return id;
+        }
+        
+        // 标识符
+        public int id;
+        
+        // 道具名称
+        public string name;
+        
+        // 效果描述
+        public string description;
+        
+        // 有效时间s
+        public int time;
+        
+        // 效果类型
+        public int buff;
+        
+        // 效果数值
+        public float buffnum;
+        
+        // 价格
+        public int price;
+        
+        // 奖励上限
+        public int rewardlimit;
+        
+        // 限购次数
+        public int purchaselimit;
+        
+
+
+        public static scoreshop CreateFromJson(JsonData item)
+        {
+            scoreshop _scoreshop = new scoreshop();
+
+            int index = 0;
+            _scoreshop.id = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _scoreshop.name = GameUtils.GetString(item[index++].ToString()); 
+            _scoreshop.description = GameUtils.GetString(item[index++].ToString()); 
+            _scoreshop.time = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _scoreshop.buff = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _scoreshop.buffnum = float.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _scoreshop.price = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _scoreshop.rewardlimit = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _scoreshop.purchaselimit = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            
+            return _scoreshop;
+        }
+
+    }
+
+    //! 生成文件 G_工会捐赠商店.xlsx
+    public class donateshop : tabledata {
+        public int getid(){
+            return id;
+        }
+        
+        // 标识符
+        public int id;
+        
+        // 道具名称
+        public string name;
+        
+        // 道具奖励数量
+        public List<reward> reward;
+        
+        // 价格
+        public int price;
+        
+        // 限购次数
+        public int purchaselimit;
+        
+
+
+        public static donateshop CreateFromJson(JsonData item)
+        {
+            donateshop _donateshop = new donateshop();
+
+            int index = 0;
+            _donateshop.id = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _donateshop.name = GameUtils.GetString(item[index++].ToString()); 
+            _donateshop.reward = GameUtils.GetRewardList(item[index++]); 
+            _donateshop.price = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _donateshop.purchaselimit = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            
+            return _donateshop;
         }
 
     }
@@ -1127,6 +1265,37 @@
 
     }
 
+    //! 生成文件 N_通知消息字符串(notice).xlsx
+    public class notice : tabledata {
+        public int getid(){
+            return id;
+        }
+        
+        // id
+        public int id;
+        
+        // 键
+        public string key;
+        
+        // 说明
+        public string dec;
+        
+
+
+        public static notice CreateFromJson(JsonData item)
+        {
+            notice _notice = new notice();
+
+            int index = 0;
+            _notice.id = int.Parse(GameUtils.GetString(item[index++].ToString())); 
+            _notice.key = GameUtils.GetString(item[index++].ToString()); 
+            _notice.dec = GameUtils.GetString(item[index++].ToString()); 
+            
+            return _notice;
+        }
+
+    }
+
     //! 生成文件 S_商店分区表 .xlsx
     public class storearea : tabledata {
         public int getid(){
diff --git a/Assets/Scripts/TowerDefense/Economy/LootDrop.cs b/Assets/Scripts/TowerDefense/Economy/LootDrop.cs
index 237707e..aa6b1b9 100644
--- a/Assets/Scripts/TowerDefense/Economy/LootDrop.cs
+++ b/Assets/Scripts/TowerDefense/Economy/LootDrop.cs
@@ -5,87 +5,94 @@
 
 namespace TowerDefense.Economy
 {
-	/// <summary>
-	/// A class that adds money to the currency when the attached DamagableBehaviour dies
-	/// 每一个Agent都会有一个LootDrop类,对应的DamageableBehaviour分别派生自:
-	/// Agent--Targetable--DamageableBehaviour
-	/// </summary>
-	[RequireComponent(typeof(DamageableBehaviour))]
-	public class LootDrop : MonoBehaviour
-	{
-		/// <summary>
-		/// The amount of loot/currency dropped when object "dies"
-		/// </summary>
-		public int lootDropped = 1;
+    /// <summary>
+    /// A class that adds money to the currency when the attached DamagableBehaviour dies
+    /// 每一个Agent都会有一个LootDrop类,对应的DamageableBehaviour分别派生自:
+    /// Agent--Targetable--DamageableBehaviour
+    /// </summary>
+    [RequireComponent(typeof(DamageableBehaviour))]
+    public class LootDrop : MonoBehaviour
+    {
+        /// <summary>
+        /// The amount of loot/currency dropped when object "dies"
+        /// </summary>
+        public int lootDropped = 1;
 
-		/// <summary>
-		/// The attached DamagableBehaviour
-		/// </summary>
-		protected DamageableBehaviour m_DamageableBehaviour;
+        /// <summary>
+        /// The attached DamagableBehaviour
+        /// </summary>
+        protected DamageableBehaviour m_DamageableBehaviour;
 
-		/// <summary>
-		/// Caches attached DamageableBehaviour
-		/// </summary>
-		protected virtual void OnEnable()
-		{
-			if (m_DamageableBehaviour == null)
-			{
-				m_DamageableBehaviour = GetComponent<DamageableBehaviour>();
-			}
-			m_DamageableBehaviour.configuration.died += OnDeath;
-		}
-
-		/// <summary>
-		/// Unsubscribed from the <see cref="m_DamageableBehaviour"/> died event
-		/// </summary>
-		protected virtual void OnDisable()
-		{
-			m_DamageableBehaviour.configuration.died -= OnDeath;
-		}
-
-		/// <summary>
-		/// The callback for when the attached object "dies".
-		/// Add <see cref="lootDropped"/> to current currency
-		/// </summary>
-		protected virtual void OnDeath(HealthChangeInfo info)
-		{
-			m_DamageableBehaviour.configuration.died -= OnDeath;
-
-			// 
-			// 当前LootDrop所在的Agent死亡后,给全局的CurrencyManager增加金币.
-			// 当前Agent死亡之后,需要在对手盘加入新的Agent
-			LevelManager levelManager = LevelManager.instance;
-			OpponentMgr opmgr = OpponentMgr.instance;
-			if (levelManager == null)
-				return;
-			Agent agent = gameObject.GetComponent<Agent>();
-			if( (agent!=null) && agent.opponentAgent)
-            {				
-				if (opmgr == null)
-				{
-					return;
-				}
-				opmgr.currency.AddCurrency(lootDropped);
-				/* 修改为不再死亡后发布怪物到对方视野.
-				if( agent.bRespawn)
-                {
-					AgentSetData sd = agent.mAgentData;
-					int attid = OpponentMgr.instance.GetTowerAttID(agent.waveLineID);
-					levelManager.waveManager.SpawnAgent(agent.waveLineID,sd.hp,sd.speed, attid );
-				}*/
-            }
-            else
+        /// <summary>
+        /// Caches attached DamageableBehaviour
+        /// </summary>
+        protected virtual void OnEnable()
+        {
+            if (m_DamageableBehaviour == null)
             {
-				levelManager.currency.AddCurrency(lootDropped);
-				/*
-				if (agent.bRespawn)
-                {
-					AgentSetData sd = agent.mAgentData;
-					int attid = levelManager.GetTowerAttID(agent.waveLineID);
-					opmgr.m_WaveManager.SpawnAgent(agent.waveLineID, sd.hp,sd.speed, attid );
-				}*/
-			}
+                m_DamageableBehaviour = GetComponent<DamageableBehaviour>();
+            }
+            m_DamageableBehaviour.configuration.died += OnDeath;
+        }
 
-		}
-	}
+        /// <summary>
+        /// Unsubscribed from the <see cref="m_DamageableBehaviour"/> died event
+        /// </summary>
+        protected virtual void OnDisable()
+        {
+            m_DamageableBehaviour.configuration.died -= OnDeath;
+        }
+
+        /// <summary>
+        /// The callback for when the attached object "dies".
+        /// Add <see cref="lootDropped"/> to current currency
+        /// </summary>
+        protected virtual void OnDeath(HealthChangeInfo info)
+        {
+            m_DamageableBehaviour.configuration.died -= OnDeath;
+
+            if (LevelManager.instanceExists)
+            {
+                // 当前LootDrop所在的Agent死亡后,给全局的CurrencyManager增加金币.
+                // 当前Agent死亡之后,需要在对手盘加入新的Agent
+                LevelManager levelManager = LevelManager.instance;
+                OpponentMgr opmgr = OpponentMgr.instance;
+                if (levelManager == null)
+                    return;
+                Agent agent = gameObject.GetComponent<Agent>();
+                if ((agent != null) && agent.opponentAgent)
+                {
+                    if (opmgr == null)
+                    {
+                        return;
+                    }
+                    opmgr.currency.AddCurrency(lootDropped);
+                    /* 修改为不再死亡后发布怪物到对方视野.
+                    if( agent.bRespawn)
+                    {
+                        AgentSetData sd = agent.mAgentData;
+                        int attid = OpponentMgr.instance.GetTowerAttID(agent.waveLineID);
+                        levelManager.waveManager.SpawnAgent(agent.waveLineID,sd.hp,sd.speed, attid );
+                    }*/
+                }
+                else
+                {
+                    levelManager.currency.AddCurrency(lootDropped);
+                    /*
+                    if (agent.bRespawn)
+                    {
+                        AgentSetData sd = agent.mAgentData;
+                        int attid = levelManager.GetTowerAttID(agent.waveLineID);
+                        opmgr.m_WaveManager.SpawnAgent(agent.waveLineID, sd.hp,sd.speed, attid );
+                    }*/
+                }
+            }
+            else if (EndlessLevelManager.instanceExists)
+            {
+                Agent agent = gameObject.GetComponent<Agent>();
+                if (agent != null)
+                    EndlessLevelManager.instance.Currency.AddCurrency(lootDropped);
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs
index f8f85e9..0faf113 100644
--- a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs
+++ b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs
@@ -11,6 +11,7 @@
 using System.Collections;
 using System.Collections.Generic;
 using TowerDefense.Nodes;
+using TowerDefense.UI.HUD;
 
 namespace TowerDefense.Level
 {
@@ -108,11 +109,6 @@
         /// Fired when all the waves are done and there are no more enemies left
         /// </summary>
         public event Action LevelCompleted;
-
-        /// <summary>
-        /// Fired when all of the home bases are destroyed
-        /// </summary>
-        public event Action LevelFailed;
 
         /// <summary>
         /// Fired when the level state is changed - first parameter is the old state, second parameter is the new state
@@ -283,6 +279,12 @@
             }
         }
 
+        private void Start()
+        {
+            EndlessBuffSelect.instance.BuffSelectCompleted += OnBuffSelectCompleted;
+            EndlessGameUI.instance.GameOverEvent += SafelyCallLevelCompleted;
+        }
+
         /// <summary>
         /// Updates the currency gain controller
         /// </summary>
@@ -297,6 +299,7 @@
             {
                 isBuffSelectCompleted = true;
                 WaveManager.StartWaves(CurrentLevel);
+                EndlessUIStart.instance.Restart();
             }
 
             // 本关卡所有波次全部生成完成 && 敌人全部被清理了,然后就去尝试进入下一关
@@ -384,14 +387,9 @@
                 return;
             }
 
-            EndlessUIStart.instance.SelectBuffUI.SetActive(true);
-
-            for (int i = 0; i < 3; ++i)
-            {
-                GameObject descObj = GameObject.Find($"BuffDesc{i}");
-                Text obj = descObj.GetComponent<Text>();
-                obj.text = list[i].Config.brief;
-            }
+            EndlessUIStart.instance.Pause();
+            EndlessBuffSelect.instance.Refresh(list);
+            EndlessBuffSelect.instance.ShowBuffUI();
         }
 
         /// <summary>
@@ -400,7 +398,6 @@
         /// <param name="index"></param>
         public void OnBuffSelectCompleted(int index)
         {
-            EndlessUIStart.instance.SelectBuffUI.SetActive(false);
             isBuffSelectCompleted = false;
             EndlessBuffManager.instance.AddBuff(EndlessBuffData.GetBuffByIndex(index));
         }
@@ -430,7 +427,7 @@
                     ChangeLevelState(LevelState.Win);
                     break;
                 case LevelState.Lose:
-                    SafelyCallLevelFailed();
+                    SafelyCallLevelCompleted();
                     break;
                 case LevelState.Win:
                     SafelyCallLevelCompleted();
@@ -453,11 +450,11 @@
                 homeBaseDestroyed();
             }
 
-            // If there are no home bases left and the level is not over then set the level to lost
-            if ((NumberOfHomeBasesLeft < 3) && !isGameOver)
-            {
-                ChangeLevelState(LevelState.Lose);
-            }
+            // // If there are no home bases left and the level is not over then set the level to lost
+            // if ((NumberOfHomeBasesLeft < 3) && !isGameOver)
+            // {
+            //     ChangeLevelState(LevelState.Lose);
+            // }
         }
 
         /// <summary>
@@ -482,15 +479,6 @@
         {
             if (DecrementEnemies != null)
                 DecrementEnemies(1);
-        }
-
-        /// <summary>
-        /// Calls the <see cref="levelFailed"/> event
-        /// </summary>
-        protected virtual void SafelyCallLevelFailed()
-        {
-            if (LevelFailed != null)
-                LevelFailed();
         }
 
         /// <summary>
diff --git a/Assets/Scripts/TowerDefense/Level/EndlessWave.cs b/Assets/Scripts/TowerDefense/Level/EndlessWave.cs
index 3ac8f69..cab46cf 100644
--- a/Assets/Scripts/TowerDefense/Level/EndlessWave.cs
+++ b/Assets/Scripts/TowerDefense/Level/EndlessWave.cs
@@ -86,7 +86,7 @@
             spawnedEnemies = 0;
 
             SpawnCurrent();
-            spawnTimer = new RepeatingTimer(data.Config.interval / 3000f, SpawnCurrent);
+            spawnTimer = new RepeatingTimer(data.Config.interval / 1000f, SpawnCurrent);
             StartTimer(spawnTimer);
         }
 
diff --git a/Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs b/Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs
new file mode 100644
index 0000000..2da9c2a
--- /dev/null
+++ b/Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs
@@ -0,0 +1,51 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using Core.Utilities;
+using System;
+
+/**
+ * 无尽模式查看已经获得道具
+ * @Author: chenxin
+ * @Date: 2020-10-19 16:53:29
+ */
+namespace KTGMGemClient
+{
+    public class EndlessViewObtainedProps : Singleton<EndlessViewObtainedProps>
+    {
+        /// <summary>
+        /// 奖励信息界面
+        /// </summary>
+        public GameObject RewardInfoUI;
+
+        /// <summary>
+        /// 奖励信息界面是否正在展示
+        /// </summary>
+        private bool isShow;
+
+        // Start is called before the first frame update
+        private void Start()
+        {
+            
+        }
+
+        private void OnEnable()
+        {
+            RewardInfoUI.SetActive(false);
+            isShow = false;
+        }
+
+        // Update is called once per frame
+        private void Update()
+        {
+            
+        }
+
+        public void OnClick()
+        {
+            isShow = !isShow;
+            RewardInfoUI.SetActive(isShow);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta b/Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs.meta
similarity index 83%
copy from Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
copy to Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs.meta
index 906d708..e7d0dcc 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
+++ b/Assets/Scripts/TowerDefense/Towers/EndlessViewObtainedProps.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 77846cbd0fd353546b25fc2e0d6ad952
+guid: 499223bcef37be1429008117fbff70cd
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs b/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs
index 214c076..48bf65b 100644
--- a/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs
+++ b/Assets/Scripts/TowerDefense/Towers/Placement/TowerPlacementGridEndless.cs
@@ -289,7 +289,7 @@
 
         void Update()
         {
-            if (m_arrCoinGenTime == null) return;
+            if (m_arrCoinGenTime == null || !EndlessUIStart.instance.IsGameRunning) return;
 
             float delta = Time.deltaTime;
             float timePe = JsonDataCenter.GOLD_TIME / 1000.0f;
diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs b/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs
new file mode 100644
index 0000000..cc26693
--- /dev/null
+++ b/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs
@@ -0,0 +1,101 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using Core.Utilities;
+using System;
+
+/**
+ * 选择buff脚本
+ * @Author: chenxin
+ * @Date: 2020-10-19 15:55:46
+ */
+namespace KTGMGemClient
+{
+    public class EndlessBuffSelect : Singleton<EndlessBuffSelect>
+    {
+        public Text Prompt;
+
+        public List<SelectBuffIcon> IconList;
+
+        public List<Sprite> SpriteList;
+
+        /// <summary>
+        /// buff是否选中完成
+        /// </summary>
+        private bool isCompleted;
+
+        public event Action<int> BuffSelectCompleted;
+
+        private int SelectedIndex;
+
+        // Start is called before the first frame update
+        private void Start()
+        {
+            for (int i = 0; i < IconList.Count; ++i)
+            {
+                IconList[i].OnSelectBuffCompleted += OnClick;
+            }
+        }
+
+        private void OnEnable()
+        {
+            isCompleted = false;
+            Prompt.text = "点击选择buff";
+            
+            for (int i = 0; i < IconList.Count; ++i)
+            {
+                IconList[i].SetIcon(SpriteList[i]);
+                IconList[i].SetState(EndlessBuffSelectState.Normal);
+            }
+        }
+
+        public void OnClick(int index)
+        {
+            if (isCompleted) return;
+
+            isCompleted = true;
+            SelectedIndex = index;
+            Prompt.text = "选择buff成功";
+
+            for (int i = 0; i < IconList.Count; ++i)
+            {
+                if (index == i)
+                    IconList[i].SetState(EndlessBuffSelectState.Selected);
+                else
+                    IconList[i].SetState(EndlessBuffSelectState.Unselected);
+            }
+
+            StartCoroutine(DelayToClose());
+        }
+
+        public void ShowBuffUI()
+        {
+            gameObject.SetActive(true);
+        }
+
+        public void HideBuffUI()
+        {
+            gameObject.SetActive(false);
+        }
+
+        private IEnumerator DelayToClose()
+        {
+            yield return new WaitForSeconds(0.5f);
+            HideBuffUI();
+
+            if (BuffSelectCompleted != null)
+                BuffSelectCompleted(SelectedIndex);
+        }
+
+        public void Refresh(List<EndlessBuffConfig> list)
+        {
+            for (int i = 0; i < IconList.Count; ++i)
+            {
+                IconList[i].SetName(list[i].Config.name);
+                IconList[i].SetEffect(list[i].Config.brief);
+                IconList[i].SetRare(list[i].Config.rare);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta b/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs.meta
similarity index 83%
rename from Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
rename to Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs.meta
index 906d708..a6d98e5 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
+++ b/Assets/Scripts/TowerDefense/UI/EndlessBuffSelect.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 77846cbd0fd353546b25fc2e0d6ad952
+guid: 04afc9deff437494a9f503d7f59ccc83
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs b/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs
new file mode 100644
index 0000000..dbcfccf
--- /dev/null
+++ b/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs
@@ -0,0 +1,106 @@
+using UnityEngine;
+using TowerDefense.UI.HUD;
+using DG.Tweening;
+using TowerDefense.Towers.Placement;
+using UnityEngine.SceneManagement;
+using TowerDefense.Level;
+
+/**
+ * 无尽模式结算
+ * @Author: chenxin
+ * @Date: 2020-10-19 17:11:03
+ */
+namespace KTGMGemClient
+{
+    public class EndlessSettlement : MonoBehaviour
+    {
+        public AudioClip VictoryAudio;
+
+        public AudioSource AudioSource;
+
+        /// <summary>
+        /// Name of level select screen
+        /// </summary>
+        public string menuSceneName = "MainManuScene";
+
+        /// <summary>
+        /// Reference to the <see cref="EndlessLevelManager" />
+        /// </summary>
+        protected EndlessLevelManager levelManager;
+
+        // Start is called before the first frame update
+        private void Start()
+        {
+            LazyLoad();
+            levelManager.LevelCompleted += Victory;
+        }
+
+        /// <summary>
+        /// 回到主界面的功能,暂时也使用重新开启新关卡.
+        /// </summary>
+        public void ReturnToMainMenu()
+        {
+            // 清空所有Tween数据:
+            DOTween.Clear();
+            EndlessUIStart.bFirstLoaded = false;
+            EndlessUIStart.bGameStart = false;
+
+            TowerPlacementGridEndless.GRID_OPENCASH = 100;
+
+            SafelyUnsubscribe();
+            SceneManager.LoadScene(menuSceneName);
+        }
+
+        /// <summary>
+        /// Shows the end game screen
+        /// </summary>
+        protected void OpenEndGameScreen(bool victory)
+        {
+            if (!EndlessGameUI.instanceExists) return;
+
+            if (EndlessGameUI.instance.state == EndlessGameUI.State.Building)
+                EndlessGameUI.instance.CancelGhostPlacement();
+            
+            gameObject.SetActive(true);
+        }
+
+        /// <summary>
+        /// Occurs when the level is sucessfully completed
+        /// </summary>
+        protected void Victory()
+        {
+            EndlessUIStart.instance.Pause();
+            OpenEndGameScreen(true);
+            if (VictoryAudio != null && AudioSource != null)
+                AudioSource.PlayOneShot(VictoryAudio);
+        }
+
+        /// <summary>
+        /// Safely unsubscribes from <see cref="EndlessLevelManager" /> events.
+        /// </summary>
+        protected void OnDestroy()
+        {
+            SafelyUnsubscribe();
+            if (EndlessGameUI.instanceExists)
+                EndlessGameUI.instance.Unpause();
+        }
+
+        // <summary>
+        /// Ensure that <see cref="EndlessLevelManager" /> events are unsubscribed from when necessary
+        /// </summary>
+        protected void SafelyUnsubscribe()
+        {
+            LazyLoad();
+            levelManager.LevelCompleted -= Victory;
+        }
+
+        /// <summary>
+        /// Ensure <see cref="EndlessLevelManager" /> is not null
+        /// </summary>
+        protected void LazyLoad()
+        {
+            if (levelManager == null && EndlessLevelManager.instanceExists)
+                levelManager = EndlessLevelManager.instance;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta b/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs.meta
similarity index 83%
copy from Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
copy to Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs.meta
index 906d708..0bcd52a 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
+++ b/Assets/Scripts/TowerDefense/UI/EndlessSettlement.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 77846cbd0fd353546b25fc2e0d6ad952
+guid: f2125c50d4929b84fa889da0a3054cc7
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs b/Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs
new file mode 100644
index 0000000..02169e4
--- /dev/null
+++ b/Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs
@@ -0,0 +1,42 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/**
+ * 无尽模式切换速度脚本
+ * @Author: chenxin
+ * @Date: 2020-10-19 16:34:56
+ */
+namespace KTGMGemClient
+{
+    public class EndlessSwitchSpeed : MonoBehaviour
+    {
+        /// <summary>
+        /// 当前的倍速
+        /// </summary>
+        /// <value></value>
+        public int Speed { get; private set; } = 1;
+
+        public Image Icon;
+
+        public List<Sprite> SpriteList;
+
+        private void Start()
+        {
+            Icon.sprite = SpriteList[Speed - 1];
+        }
+
+        public void OnClick()
+        {
+            SwitchSpeed();
+        }
+
+        private void SwitchSpeed()
+        {
+            Speed = Speed == 1 ? 2 : 1;
+            Time.timeScale = Speed;
+            Icon.sprite = SpriteList[Speed - 1];
+        }
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta b/Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs.meta
similarity index 83%
copy from Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
copy to Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs.meta
index 906d708..c8a1e02 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
+++ b/Assets/Scripts/TowerDefense/UI/EndlessSwitchSpeed.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 77846cbd0fd353546b25fc2e0d6ad952
+guid: be99b683351459b4f8806223396a05a8
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs b/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs
index ab79cf8..e2dd0f7 100644
--- a/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs
+++ b/Assets/Scripts/TowerDefense/UI/EndlessUIStart.cs
@@ -19,9 +19,9 @@
     public TextMeshProUGUI timeStatic = null;
 
     /// <summary>
-    /// 选择buff界面
+    /// 结算界面
     /// </summary>
-    public GameObject SelectBuffUI;
+    public GameObject SettlementUI;
 
     /// <summary>
     /// 倒计时整体的背景图片Mask
@@ -42,6 +42,8 @@
 
     protected bool[] bVibrate;
 
+    private bool isPause;
+
     // Start is called before the first frame update
     void Start()
     {
@@ -53,8 +55,9 @@
 
         if (timeStatic)
             timeStatic.gameObject.SetActive(false);
-        SelectBuffUI.SetActive(false);
+        EndlessBuffSelect.instance.HideBuffUI();
         EndlessBossHPManager.instance.HideHP();
+        SettlementUI.SetActive(false);
     }
 
     /// <summary>
@@ -98,24 +101,38 @@
         }
     }
 
+    public void Pause()
+    {
+        isPause = true;
+    }
+
+    public void Restart()
+    {
+        isPause = false;
+    }
+
+    public bool IsGameRunning { get { return !isPause; } }
+
     // Update is called once per frame
     void Update()
     {
+        if (isPause) return;
+
         if (bGameStart)
         {
             startTime += Time.deltaTime;
             timeTextNew.text = ConvertTime((float)Math.Ceiling(startTime));
         }
 
-        if ((!bFirstLoaded) && (!bGameStart))
+        if (!bFirstLoaded && !bGameStart)
         {
             bFirstLoaded = true;
             secToDo = 4;
         }
 
-        if (bFirstLoaded && (!bGameStart))
+        if (bFirstLoaded && !bGameStart)
         {
-            secToDo -= (Time.deltaTime * 1.0f); // 放慢时间用于调试
+            secToDo -= Time.deltaTime;
 
             if (secToDo >= 3)
             {
@@ -159,12 +176,10 @@
             {
                 uiStartMssk.gameObject.SetActive(false);
                 countDownTextNew.text = "";
-
+                bGameStart = true;
                 // 开始关卡
                 EndlessLevelManager.instance.StartLevel();
-
                 timeTextNew.gameObject.SetActive(true);
-                bGameStart = true;
 
                 // 开始播放背景音乐.
                 if (bgMusic != null)
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
index b03cc39..c3398f0 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
+++ b/Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -4,6 +4,7 @@
 using DG.Tweening;
 using JetBrains.Annotations;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using TMPro;
 using TowerDefense.Level;
@@ -201,6 +202,8 @@
         // 测试屏幕显示相关的倒计时.
         protected bool bLoaded = false;
 
+        private Timer overTimer;
+
         /// <summary>
         /// 总兵线数
         /// </summary>
@@ -228,6 +231,8 @@
         /// 所有攻击塔位的摧毁信息,是否被摧毁,默认全部没有被摧毁
         /// </summary>
         private bool[,] TowerDestroyArr;
+
+        public event Action GameOverEvent;
 
         public IPlacementArea selfTowerPlaceArea
         {
@@ -421,12 +426,9 @@
                     break;
                 case State.Paused:
                 case State.GameOver:
-                    // if (oldState == State.Building)
-                    // {
-                    //     CancelGhostPlacement();
-                    // }
-                    // Time.timeScale = 0f;
-                    Debug.Log("--------------------- game over !!! ---------------------");
+                    if (oldState == State.Building)
+                        CancelGhostPlacement();
+                    Time.timeScale = 1f;
                     break;
                 default:
                     throw new ArgumentOutOfRangeException("newState", newState, null);
@@ -681,7 +683,7 @@
                 }
 
                 TowerDestroyArr[xidx, i] = true;
-                Tower tower = FindTowerWithGridIdx(xidx, i);
+                Tower tower = FindTowerWithGridIdx(xidx, 3 - i);
 
                 if (tower)
                 {
@@ -730,7 +732,15 @@
                 // 红心减少逻辑
                 // HealthHeartState.instance.killHeart(false);
                 GameOver();
+                overTimer = new Timer(1f, SafelyCallGameOverEvent);
             }
+        }
+
+        private void SafelyCallGameOverEvent()
+        {
+            if (GameOverEvent != null)
+                GameOverEvent();
+            overTimer = null;
         }
 
         /// <summary>
@@ -1471,7 +1481,7 @@
             int cost = TowerPrice.instance.currentTowerPrice;
             if (zeroCost)
                 cost = 0;
-            
+
             if (forceCost != -1)
                 cost = forceCost;
 
@@ -1499,7 +1509,7 @@
 
                 PlaceTower(lvl);
             }
-            
+
             return true;
         }
 
@@ -2001,6 +2011,9 @@
         /// </summary>
         private void Update()
         {
+            if (overTimer != null)
+                overTimer.Tick(Time.deltaTime);
+
             for (int ti = listTowerTimer.Count - 1; ti >= 0; ti--)
             {
                 // 如果执行到,会在DelTower函数内删除对应的listTowerTimer.
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs b/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs
deleted file mode 100644
index 1ce5070..0000000
--- a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using System;
-using TowerDefense.Level;
-
-/**
- * 无尽模式选择buff
- * @Author: chenxin
- * @Date: 2020-10-15 17:00:26
- */
-namespace KTGMGemClient
-{
-    public class SelectBuff : MonoBehaviour
-    {
-        /// <summary>
-        /// 选择的索引
-        /// </summary>
-        public int Index;
-
-        public event Action<int> OnSelectBuffCompleted;
-
-        private void Start()
-        {
-            OnSelectBuffCompleted += EndlessLevelManager.instance.OnBuffSelectCompleted;
-        }
-
-        /// <summary>
-        /// 点击选择buff
-        /// </summary>
-        public void OnClick()
-        {
-            if (OnSelectBuffCompleted != null)
-                OnSelectBuffCompleted(Index);
-        }
-    }
-}
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs b/Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs
new file mode 100644
index 0000000..7ef97db
--- /dev/null
+++ b/Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs
@@ -0,0 +1,96 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using System;
+
+/**
+ * 无尽模式选择buff
+ * @Author: chenxin
+ * @Date: 2020-10-15 17:00:26
+ */
+namespace KTGMGemClient
+{
+    public class SelectBuffIcon : MonoBehaviour
+    {
+        public Image Icon;
+
+        public Image BgMask;
+
+        public Image Check;
+
+        public Text Name;
+
+        public Text Effect;
+
+        public event Action<int> OnSelectBuffCompleted;
+
+        /// <summary>
+        /// 选择的索引
+        /// </summary>
+        public int Index;
+
+        private void Start()
+        {
+            SetState(EndlessBuffSelectState.Normal);
+        }
+
+        /// <summary>
+        /// 设置选中状态
+        /// </summary>
+        /// <param name="state"></param>
+        public void SetState(EndlessBuffSelectState state)
+        {
+            switch (state)
+            {
+                case EndlessBuffSelectState.Normal:
+                    Check.gameObject.SetActive(false);
+                    BgMask.gameObject.SetActive(false);
+
+                    break;
+                case EndlessBuffSelectState.Unselected:
+                    Check.gameObject.SetActive(false);
+                    BgMask.gameObject.SetActive(true);
+                    break;
+                case EndlessBuffSelectState.Selected:
+                    Check.gameObject.SetActive(true);
+                    BgMask.gameObject.SetActive(false);
+                    break;
+            }
+        }
+
+        public void OnClick()
+        {
+            if (OnSelectBuffCompleted != null)
+                OnSelectBuffCompleted(Index);
+        }
+
+        public void SetIcon(Sprite param)
+        {
+            Icon.sprite = param;
+        }
+
+        public void SetName(string buffName)
+        {
+            Name.text = buffName;
+        }
+
+        /// <summary>
+        /// 设置buff效果描述
+        /// </summary>
+        /// <param name="effect"></param>
+        public void SetEffect(string effect)
+        {
+            Effect.text = effect;
+        }
+
+        /// <summary>
+        /// 设置品级
+        /// </summary>
+        /// <param name="rare"></param>
+        public void SetRare(int rare)
+        {
+            Name.color = EndlessBuffData.GetColorByRare(rare);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta b/Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs.meta
similarity index 83%
copy from Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
copy to Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs.meta
index 906d708..77aeddd 100644
--- a/Assets/Scripts/TowerDefense/UI/HUD/SelectBuff.cs.meta
+++ b/Assets/Scripts/TowerDefense/UI/HUD/SelectBuffIcon.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 77846cbd0fd353546b25fc2e0d6ad952
+guid: 9a92c216c3d4e97459299f45fc451060
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Assets/StreamingAssets/Table/donateshop.json b/Assets/StreamingAssets/Table/donateshop.json
new file mode 100644
index 0000000..5c6b660
--- /dev/null
+++ b/Assets/StreamingAssets/Table/donateshop.json
@@ -0,0 +1 @@
+[[1,"红龙",["gem:104:1"],3000,3],[2,"知识古树",["gem:111:1"],1800,5],[3,"捐赠宝箱",["box:4:1"],4800,5],[4,"金币",["gold:1000"],1000,10]]
\ No newline at end of file
diff --git a/Assets/StreamingAssets/Table/donateshop.json.meta b/Assets/StreamingAssets/Table/donateshop.json.meta
new file mode 100644
index 0000000..3d52dfe
--- /dev/null
+++ b/Assets/StreamingAssets/Table/donateshop.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: fe1d19575852abc4ca5aabab33eef87c
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/StreamingAssets/Table/endless_buff.json b/Assets/StreamingAssets/Table/endless_buff.json
index bd4dcba..0a3d1b9 100644
--- a/Assets/StreamingAssets/Table/endless_buff.json
+++ b/Assets/StreamingAssets/Table/endless_buff.json
@@ -1 +1 @@
-[[1,"name_1",[1,0],[1,5,0],-1,"增加全体精灵5%攻击力",0,10],[2,"name_2",[1,0],[1,10,100],5,"5波内增加全体精灵10%攻击力",11,20],[3,"name_3",[2,1],[2,200,0],0,"增加200金币",0,10],[4,"name_4",[2,2],[2,500,0],0,"增加500金币",11,20],[5,"name_5",[3101],[3,3,200],0,"随机获得1个3级精灵",0,10],[6,"name_6",[3102],[3,4,500],0,"随机获得1个4级精灵",11,20]]
\ No newline at end of file
+[[1,"精灵之力",[1,0],[1,5,0],-1,"增加全体精灵5%攻击力",0,10,10001,1],[2,"能量爆发",[1,0],[1,10,100],5,"5波内增加全体精灵10%攻击力",11,20,10002,2],[3,"天降宝财",[2,1],[2,200,0],0,"增加200金币",0,10,10003,1],[4,"金币闪闪",[2,2],[2,500,0],0,"增加500金币",11,20,10004,2],[5,"精灵魔盒(中级)",[3101],[3,3,200],0,"随机获得1个3级精灵",0,10,10005,2],[6,"精灵魔盒(高级)",[3102],[3,4,500],0,"随机获得1个4级精灵",11,20,10006,3]]
\ No newline at end of file
diff --git a/Assets/StreamingAssets/Table/endless_enemy.json b/Assets/StreamingAssets/Table/endless_enemy.json
index ec92783..89c5e9f 100644
--- a/Assets/StreamingAssets/Table/endless_enemy.json
+++ b/Assets/StreamingAssets/Table/endless_enemy.json
@@ -1 +1 @@
-[[1,"测试小怪1",1,1,3,1,101],[2,"测试小怪2",1,2,2.8,1,102],[3,"测试小怪3",1,3,2.6,1,103],[4,"测试小怪4",1,4,2.4,1,104],[5,"测试小怪5",2,5,2.2,1,105],[6,"测试小怪6",2,6,2,1,106]]
\ No newline at end of file
+[[1,"测试小怪1",1,1,3,1,101],[2,"测试小怪2",1,15,1,3,102],[3,"测试小怪3",1,3,1.5,1,103],[4,"测试小怪4",1,4,2,1,104],[5,"测试小怪5",2,5,2,1,105],[6,"测试小怪6",2,6,2,1,106]]
\ No newline at end of file
diff --git a/Assets/StreamingAssets/Table/endless_port.json b/Assets/StreamingAssets/Table/endless_port.json
index 68b52fa..98f904b 100644
--- a/Assets/StreamingAssets/Table/endless_port.json
+++ b/Assets/StreamingAssets/Table/endless_port.json
@@ -1 +1 @@
-[[1,1,1,1,1,1,10,5000,200,1.5,2,1000,"gold:5",500],[2,1,1,1,2,2,10,5000,200,1.5,2,1000,"gold:5",500],[3,1,1,1,3,3,10,5000,200,1.5,2,1000,"gold:5",500],[4,1,1,1,4,4,10,5000,200,1.5,2,1000,"gold:5",500],[5,1,1,1,5,5,10,5000,200,1.5,2,1000,"gold:5",500],[6,1,1,2,1,1,10,5000,200,1.5,2,1000,"gold:5",500],[7,1,1,2,2,2,10,5000,200,1.5,2,1000,"gold:5",500],[8,1,1,2,3,3,10,5000,200,1.5,2,1000,"gold:5",500],[9,1,1,2,4,4,10,5000,200,1.5,2,1000,"gold:5",500],[10,1,1,2,5,5,10,5000,200,1.5,2,1000,"gold:5",500],[11,1,1,3,1,-2,1,5000,200,1.5,2,1000,"gold:5",500],[12,1,1,3,2,-2,1,5000,200,1.5,2,1000,"gold:5",500],[13,1,1,3,3,-2,1,5000,200,1.5,2,1000,"gold:5",500],[14,1,1,3,4,-2,1,5000,200,1.5,2,1000,"gold:5",500],[15,1,1,3,5,-2,1,5000,200,1.5,2,1000,"gold:5",500],[16,2,2,1,1,1,10,4000,200,1.5,2,1000,"gold:5",500],[17,2,2,1,2,2,10,4000,200,1.5,2,1000,"gold:5",500],[18,2,2,1,3,3,10,4000,200,1.5,2,1000,"gold:5",500],[19,2,2,1,4,4,10,4000,200,1.5,2,1000,"gold:5",500],[20,2,2,1,5,5,10,4000,200,1.5,2,1000,"gold:5",500],[21,2,2,2,1,1,10,4000,200,1.5,2,1000,"gold:5",500],[22,2,2,2,2,2,10,4000,200,1.5,2,1000,"gold:5",500],[23,2,2,2,3,3,10,4000,200,1.5,2,1000,"gold:5",500],[24,2,2,2,4,4,10,4000,200,1.5,2,1000,"gold:5",500],[25,2,2,2,5,5,10,4000,200,1.5,2,1000,"gold:5",500],[26,2,2,3,1,-2,1,4000,200,1.5,2,1000,"gold:5",500],[27,2,2,3,2,-2,1,4000,200,1.5,2,1000,"gold:5",500],[28,2,2,3,3,-2,1,4000,200,1.5,2,1000,"gold:5",500],[29,2,2,3,4,-2,1,4000,200,1.5,2,1000,"gold:5",500],[30,2,2,3,5,-2,1,4000,200,1.5,2,1000,"gold:5",500],[31,3,3,1,1,1,20,3000,200,1.5,2,1000,"gold:5",500],[32,3,3,1,2,2,20,3000,200,1.5,2,1000,"gold:5",500],[33,3,3,1,3,3,20,3000,200,1.5,2,1000,"gold:5",500],[34,3,3,1,4,4,20,3000,200,1.5,2,1000,"gold:5",500],[35,3,3,1,5,5,20,3000,200,1.5,2,1000,"gold:5",500],[36,3,3,2,1,1,20,3000,200,1.5,2,1000,"gold:5",500],[37,3,3,2,2,2,20,3000,200,1.5,2,1000,"gold:5",500],[38,3,3,2,3,3,20,3000,200,1.5,2,1000,"gold:5",500],[39,3,3,2,4,4,20,3000,200,1.5,2,1000,"gold:5",500],[40,3,3,2,5,5,20,3000,200,1.5,2,1000,"gold:5",500],[41,3,3,3,1,-2,1,3000,200,1.5,2,1000,"gold:5",500],[42,3,3,3,2,-2,1,3000,200,1.5,2,1000,"gold:5",500],[43,3,3,3,3,-2,1,3000,200,1.5,2,1000,"gold:5",500],[44,3,3,3,4,-2,1,3000,200,1.5,2,1000,"gold:5",500],[45,3,3,3,5,-2,1,3000,200,1.5,2,1000,"box:3:1",500]]
\ No newline at end of file
+[[1,1,1,1,1,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[2,1,1,1,2,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[3,1,1,1,3,1,12,1500,200,1.5,2,3000,["gold:5"],[500,9500]],[4,1,1,1,4,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[5,1,1,1,5,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[6,1,1,2,1,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[7,1,1,2,2,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[8,1,1,2,3,3,6,3000,350,1.5,2,3000,["gold:5"],[500,9500]],[9,1,1,2,4,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[10,1,1,2,5,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[11,1,1,3,1,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[12,1,1,3,2,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[13,1,1,3,3,2,4,4500,500,1.5,2,3000,["gold:5"],[500,9500]],[14,1,1,3,4,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[15,1,1,3,5,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[16,2,2,1,1,0,0,0,1000,1.5,4,3000,["gold:5"],[500,9500]],[17,2,2,1,2,3,6,3000,1000,1.5,4,3000,["gold:5"],[500,9500]],[18,2,2,1,3,1,12,1500,1000,1.5,4,3000,["gold:5"],[500,9500]],[19,2,2,1,4,3,6,3000,1000,1.5,4,3000,["gold:5"],[500,9500]],[20,2,2,1,5,0,0,0,1000,1.5,4,3000,["gold:5"],[500,9500]],[21,2,2,2,1,2,4,4500,1200,1.5,4,3000,["gold:5"],[500,9500]],[22,2,2,2,2,0,0,0,1200,1.5,4,3000,["gold:5"],[500,9500]],[23,2,2,2,3,3,6,3000,1200,1.5,4,3000,["gold:5"],[500,9500]],[24,2,2,2,4,0,0,0,1200,1.5,4,3000,["gold:5"],[500,9500]],[25,2,2,2,5,2,4,4500,1200,1.5,4,3000,["gold:5"],[500,9500]],[26,2,2,3,1,2,4,4500,1400,1.5,4,3000,["gold:5"],[500,9500]],[27,2,2,3,2,3,6,3000,1400,1.5,4,3000,["gold:5"],[500,9500]],[28,2,2,3,3,1,12,1500,1400,1.5,4,3000,["gold:5"],[500,9500]],[29,2,2,3,4,3,6,3000,1400,1.5,4,3000,["gold:5"],[500,9500]],[30,2,2,3,5,2,4,4500,1400,1.5,4,3000,["gold:5"],[500,9500]],[31,3,3,1,1,3,6,3000,1800,1.5,8,3000,["gold:5"],[500,9500]],[32,3,3,1,2,1,12,1500,1800,1.5,8,3000,["gold:5"],[500,9500]],[33,3,3,1,3,2,4,4500,1800,1.5,8,3000,["gold:5"],[500,9500]],[34,3,3,1,4,1,12,1500,1800,1.5,8,3000,["gold:5"],[500,9500]],[35,3,3,1,5,3,6,3000,1800,1.5,8,3000,["gold:5"],[500,9500]],[36,3,3,2,1,1,12,1500,2100,1.5,8,3000,["gold:5"],[500,9500]],[37,3,3,2,2,3,6,3000,2100,1.5,8,3000,["gold:5"],[500,9500]],[38,3,3,2,3,2,4,4500,2100,1.5,8,3000,["gold:5"],[500,9500]],[39,3,3,2,4,3,6,3000,2100,1.5,8,3000,["gold:5"],[500,9500]],[40,3,3,2,5,1,12,1500,2100,1.5,8,3000,["gold:5"],[500,9500]],[41,3,3,3,1,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[42,3,3,3,2,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[43,3,3,3,3,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[44,3,3,3,4,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[45,3,3,3,5,2,4,4500,2400,1.5,8,3000,["box:3:1"],[500,9500]],[46,4,3,1,1,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[47,4,3,1,2,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[48,4,3,1,3,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[49,4,3,1,4,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[50,4,3,1,5,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[51,4,3,2,1,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[52,4,3,2,2,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[53,4,3,2,3,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[54,4,3,2,4,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[55,4,3,2,5,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[56,4,3,3,1,2,6,3000,3300,1.5,16,3000,["gold:5"],[500,9500]],[57,4,3,3,2,2,6,3000,3300,1.5,16,3000,["gold:5"],[500,9500]],[58,4,3,3,3,1,12,1500,3300,1.5,16,3000,["gold:5"],[500,9500]],[59,4,3,3,4,2,6,3000,3300,1.5,16,3000,["gold:5"],[500,9500]],[60,4,3,3,5,2,6,3000,3300,1.5,16,3000,["box:3:1"],[500,9500]],[61,5,3,1,1,2,8,4500,3600,2,32,3000,["gold:5"],[500,9500]],[62,5,3,1,2,3,12,3000,3600,2,32,3000,["gold:5"],[500,9500]],[63,5,3,1,3,1,24,1500,3600,2,32,3000,["gold:5"],[500,9500]],[64,5,3,1,4,3,12,3000,3600,2,32,3000,["gold:5"],[500,9500]],[65,5,3,1,5,2,8,4500,3600,2,32,3000,["gold:5"],[500,9500]],[66,5,3,2,1,3,12,3000,3900,2,32,3000,["gold:5"],[500,9500]],[67,5,3,2,2,1,24,1500,3900,2,32,3000,["gold:5"],[500,9500]],[68,5,3,2,3,2,8,4500,3900,2,32,3000,["gold:5"],[500,9500]],[69,5,3,2,4,1,24,1500,3900,2,32,3000,["gold:5"],[500,9500]],[70,5,3,2,5,3,12,3000,3900,2,32,3000,["gold:5"],[500,9500]],[71,5,3,3,1,1,24,1500,4200,2,32,3000,["gold:5"],[500,9500]],[72,5,3,3,2,3,12,3000,4200,2,32,3000,["gold:5"],[500,9500]],[73,5,3,3,3,2,8,4500,4200,2,32,3000,["gold:5"],[500,9500]],[74,5,3,3,4,3,12,3000,4200,2,32,3000,["gold:5"],[500,9500]],[75,5,3,3,5,1,24,1500,4200,2,32,3000,["gold:5"],[500,9500]],[76,5,3,4,1,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[77,5,3,4,2,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[78,5,3,4,3,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[79,5,3,4,4,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[80,5,3,4,5,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[81,5,3,5,1,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[82,5,3,5,2,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[83,5,3,5,3,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[84,5,3,5,4,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[85,5,3,5,5,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[86,5,3,6,1,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[87,5,3,6,2,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[88,5,3,6,3,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[89,5,3,6,4,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[90,5,3,6,5,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[91,5,3,7,1,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[92,5,3,7,2,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[93,5,3,7,3,1,24,1500,5400,2,64,3000,["gold:5"],[500,9500]],[94,5,3,7,4,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[95,5,3,7,5,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[96,5,3,8,1,2,8,4500,5700,2,64,3000,["gold:5"],[500,9500]],[97,5,3,8,2,3,12,3000,5700,2,64,3000,["gold:5"],[500,9500]],[98,5,3,8,3,1,24,1500,5700,2,64,3000,["gold:5"],[500,9500]],[99,5,3,8,4,3,12,3000,5700,2,64,3000,["gold:5"],[500,9500]],[100,5,3,8,5,2,8,4500,5700,2,64,3000,["gold:5"],[500,9500]],[101,5,3,9,1,3,12,3000,6000,2,64,3000,["gold:5"],[500,9500]],[102,5,3,9,2,1,24,1500,6000,2,64,3000,["gold:5"],[500,9500]],[103,5,3,9,3,2,8,4500,6000,2,64,3000,["gold:5"],[500,9500]],[104,5,3,9,4,1,24,1500,6000,2,64,3000,["gold:5"],[500,9500]],[105,5,3,9,5,3,12,3000,6000,2,64,3000,["gold:5"],[500,9500]],[106,5,3,10,1,1,24,1500,6300,2,64,3000,["gold:5"],[500,9500]],[107,5,3,10,2,3,12,3000,6300,2,64,3000,["gold:5"],[500,9500]],[108,5,3,10,3,2,8,4500,6300,2,64,3000,["gold:5"],[500,9500]],[109,5,3,10,4,3,12,3000,6300,2,64,3000,["gold:5"],[500,9500]],[110,5,3,10,5,1,24,1500,6300,2,64,3000,["gold:5"],[500,9500]],[111,5,3,11,1,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[112,5,3,11,2,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[113,5,3,11,3,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[114,5,3,11,4,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[115,5,3,11,5,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[116,5,3,12,1,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[117,5,3,12,2,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[118,5,3,12,3,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[119,5,3,12,4,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[120,5,3,12,5,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]]]
\ No newline at end of file
diff --git a/Assets/StreamingAssets/Table/notice.json b/Assets/StreamingAssets/Table/notice.json
new file mode 100644
index 0000000..8eece29
--- /dev/null
+++ b/Assets/StreamingAssets/Table/notice.json
@@ -0,0 +1 @@
+[[1,"玩家{0}加入了工会","工会"]]
\ No newline at end of file
diff --git a/Assets/StreamingAssets/Table/notice.json.meta b/Assets/StreamingAssets/Table/notice.json.meta
new file mode 100644
index 0000000..707d91e
--- /dev/null
+++ b/Assets/StreamingAssets/Table/notice.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: cc9d5f40f9a8a204dbfcab51726b9429
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/StreamingAssets/Table/scoreshop.json b/Assets/StreamingAssets/Table/scoreshop.json
new file mode 100644
index 0000000..b2362a2
--- /dev/null
+++ b/Assets/StreamingAssets/Table/scoreshop.json
@@ -0,0 +1 @@
+[[1,"1级金币获取增加","18小时内对战结算金币量+10%",64800,1,1.1,10000,5000,2],[2,"2级金币获取增加","18小时内对战结算金币量+15%",64800,1,1.5,15000,5000,2],[3,"通行证经验增加","18小时每次对战可获得100点通行证经验",64800,2,100,8000,2000,2]]
\ No newline at end of file
diff --git a/Assets/StreamingAssets/Table/scoreshop.json.meta b/Assets/StreamingAssets/Table/scoreshop.json.meta
new file mode 100644
index 0000000..ce276cf
--- /dev/null
+++ b/Assets/StreamingAssets/Table/scoreshop.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8dfa253d7a836b84aa81d692efa65f09
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp-firstpass.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp-firstpass.dll"
index eeaa27e..bb86f51 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp-firstpass.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp-firstpass.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp.dll"
index 42d4019..f16b0a0 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Assembly-CSharp.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Demos.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Demos.dll"
index b5fd622..d3b900a 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Demos.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Demos.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Haptics.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Haptics.dll"
index 382916b..d7b5f0a 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Haptics.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.Haptics.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.dll"
index a2ff8b3..d4f97d1 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/MoreMountains.NiceVibrations.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.TextMeshPro.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.TextMeshPro.dll"
index fe8fe4b..190b1bb 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.TextMeshPro.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.TextMeshPro.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.Timeline.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.Timeline.dll"
index 2c60ca8..834905f 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.Timeline.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/Unity.Timeline.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/UnityEngine.UI.dll" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/UnityEngine.UI.dll"
index 9f3d09e..527f349 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/UnityEngine.UI.dll"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/Managed/UnityEngine.UI.dll"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/donateshop.json" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/donateshop.json"
new file mode 100644
index 0000000..5c6b660
--- /dev/null
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/donateshop.json"
@@ -0,0 +1 @@
+[[1,"红龙",["gem:104:1"],3000,3],[2,"知识古树",["gem:111:1"],1800,5],[3,"捐赠宝箱",["box:4:1"],4800,5],[4,"金币",["gold:1000"],1000,10]]
\ No newline at end of file
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_buff.json" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_buff.json"
index bd4dcba..0a3d1b9 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_buff.json"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_buff.json"
@@ -1 +1 @@
-[[1,"name_1",[1,0],[1,5,0],-1,"增加全体精灵5%攻击力",0,10],[2,"name_2",[1,0],[1,10,100],5,"5波内增加全体精灵10%攻击力",11,20],[3,"name_3",[2,1],[2,200,0],0,"增加200金币",0,10],[4,"name_4",[2,2],[2,500,0],0,"增加500金币",11,20],[5,"name_5",[3101],[3,3,200],0,"随机获得1个3级精灵",0,10],[6,"name_6",[3102],[3,4,500],0,"随机获得1个4级精灵",11,20]]
\ No newline at end of file
+[[1,"精灵之力",[1,0],[1,5,0],-1,"增加全体精灵5%攻击力",0,10,10001,1],[2,"能量爆发",[1,0],[1,10,100],5,"5波内增加全体精灵10%攻击力",11,20,10002,2],[3,"天降宝财",[2,1],[2,200,0],0,"增加200金币",0,10,10003,1],[4,"金币闪闪",[2,2],[2,500,0],0,"增加500金币",11,20,10004,2],[5,"精灵魔盒(中级)",[3101],[3,3,200],0,"随机获得1个3级精灵",0,10,10005,2],[6,"精灵魔盒(高级)",[3102],[3,4,500],0,"随机获得1个4级精灵",11,20,10006,3]]
\ No newline at end of file
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_enemy.json" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_enemy.json"
index ec92783..89c5e9f 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_enemy.json"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_enemy.json"
@@ -1 +1 @@
-[[1,"测试小怪1",1,1,3,1,101],[2,"测试小怪2",1,2,2.8,1,102],[3,"测试小怪3",1,3,2.6,1,103],[4,"测试小怪4",1,4,2.4,1,104],[5,"测试小怪5",2,5,2.2,1,105],[6,"测试小怪6",2,6,2,1,106]]
\ No newline at end of file
+[[1,"测试小怪1",1,1,3,1,101],[2,"测试小怪2",1,15,1,3,102],[3,"测试小怪3",1,3,1.5,1,103],[4,"测试小怪4",1,4,2,1,104],[5,"测试小怪5",2,5,2,1,105],[6,"测试小怪6",2,6,2,1,106]]
\ No newline at end of file
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_port.json" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_port.json"
index 68b52fa..98f904b 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_port.json"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/endless_port.json"
@@ -1 +1 @@
-[[1,1,1,1,1,1,10,5000,200,1.5,2,1000,"gold:5",500],[2,1,1,1,2,2,10,5000,200,1.5,2,1000,"gold:5",500],[3,1,1,1,3,3,10,5000,200,1.5,2,1000,"gold:5",500],[4,1,1,1,4,4,10,5000,200,1.5,2,1000,"gold:5",500],[5,1,1,1,5,5,10,5000,200,1.5,2,1000,"gold:5",500],[6,1,1,2,1,1,10,5000,200,1.5,2,1000,"gold:5",500],[7,1,1,2,2,2,10,5000,200,1.5,2,1000,"gold:5",500],[8,1,1,2,3,3,10,5000,200,1.5,2,1000,"gold:5",500],[9,1,1,2,4,4,10,5000,200,1.5,2,1000,"gold:5",500],[10,1,1,2,5,5,10,5000,200,1.5,2,1000,"gold:5",500],[11,1,1,3,1,-2,1,5000,200,1.5,2,1000,"gold:5",500],[12,1,1,3,2,-2,1,5000,200,1.5,2,1000,"gold:5",500],[13,1,1,3,3,-2,1,5000,200,1.5,2,1000,"gold:5",500],[14,1,1,3,4,-2,1,5000,200,1.5,2,1000,"gold:5",500],[15,1,1,3,5,-2,1,5000,200,1.5,2,1000,"gold:5",500],[16,2,2,1,1,1,10,4000,200,1.5,2,1000,"gold:5",500],[17,2,2,1,2,2,10,4000,200,1.5,2,1000,"gold:5",500],[18,2,2,1,3,3,10,4000,200,1.5,2,1000,"gold:5",500],[19,2,2,1,4,4,10,4000,200,1.5,2,1000,"gold:5",500],[20,2,2,1,5,5,10,4000,200,1.5,2,1000,"gold:5",500],[21,2,2,2,1,1,10,4000,200,1.5,2,1000,"gold:5",500],[22,2,2,2,2,2,10,4000,200,1.5,2,1000,"gold:5",500],[23,2,2,2,3,3,10,4000,200,1.5,2,1000,"gold:5",500],[24,2,2,2,4,4,10,4000,200,1.5,2,1000,"gold:5",500],[25,2,2,2,5,5,10,4000,200,1.5,2,1000,"gold:5",500],[26,2,2,3,1,-2,1,4000,200,1.5,2,1000,"gold:5",500],[27,2,2,3,2,-2,1,4000,200,1.5,2,1000,"gold:5",500],[28,2,2,3,3,-2,1,4000,200,1.5,2,1000,"gold:5",500],[29,2,2,3,4,-2,1,4000,200,1.5,2,1000,"gold:5",500],[30,2,2,3,5,-2,1,4000,200,1.5,2,1000,"gold:5",500],[31,3,3,1,1,1,20,3000,200,1.5,2,1000,"gold:5",500],[32,3,3,1,2,2,20,3000,200,1.5,2,1000,"gold:5",500],[33,3,3,1,3,3,20,3000,200,1.5,2,1000,"gold:5",500],[34,3,3,1,4,4,20,3000,200,1.5,2,1000,"gold:5",500],[35,3,3,1,5,5,20,3000,200,1.5,2,1000,"gold:5",500],[36,3,3,2,1,1,20,3000,200,1.5,2,1000,"gold:5",500],[37,3,3,2,2,2,20,3000,200,1.5,2,1000,"gold:5",500],[38,3,3,2,3,3,20,3000,200,1.5,2,1000,"gold:5",500],[39,3,3,2,4,4,20,3000,200,1.5,2,1000,"gold:5",500],[40,3,3,2,5,5,20,3000,200,1.5,2,1000,"gold:5",500],[41,3,3,3,1,-2,1,3000,200,1.5,2,1000,"gold:5",500],[42,3,3,3,2,-2,1,3000,200,1.5,2,1000,"gold:5",500],[43,3,3,3,3,-2,1,3000,200,1.5,2,1000,"gold:5",500],[44,3,3,3,4,-2,1,3000,200,1.5,2,1000,"gold:5",500],[45,3,3,3,5,-2,1,3000,200,1.5,2,1000,"box:3:1",500]]
\ No newline at end of file
+[[1,1,1,1,1,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[2,1,1,1,2,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[3,1,1,1,3,1,12,1500,200,1.5,2,3000,["gold:5"],[500,9500]],[4,1,1,1,4,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[5,1,1,1,5,0,0,0,200,1.5,2,3000,["gold:5"],[500,9500]],[6,1,1,2,1,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[7,1,1,2,2,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[8,1,1,2,3,3,6,3000,350,1.5,2,3000,["gold:5"],[500,9500]],[9,1,1,2,4,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[10,1,1,2,5,0,0,0,350,1.5,2,3000,["gold:5"],[500,9500]],[11,1,1,3,1,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[12,1,1,3,2,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[13,1,1,3,3,2,4,4500,500,1.5,2,3000,["gold:5"],[500,9500]],[14,1,1,3,4,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[15,1,1,3,5,0,0,0,500,1.5,2,3000,["gold:5"],[500,9500]],[16,2,2,1,1,0,0,0,1000,1.5,4,3000,["gold:5"],[500,9500]],[17,2,2,1,2,3,6,3000,1000,1.5,4,3000,["gold:5"],[500,9500]],[18,2,2,1,3,1,12,1500,1000,1.5,4,3000,["gold:5"],[500,9500]],[19,2,2,1,4,3,6,3000,1000,1.5,4,3000,["gold:5"],[500,9500]],[20,2,2,1,5,0,0,0,1000,1.5,4,3000,["gold:5"],[500,9500]],[21,2,2,2,1,2,4,4500,1200,1.5,4,3000,["gold:5"],[500,9500]],[22,2,2,2,2,0,0,0,1200,1.5,4,3000,["gold:5"],[500,9500]],[23,2,2,2,3,3,6,3000,1200,1.5,4,3000,["gold:5"],[500,9500]],[24,2,2,2,4,0,0,0,1200,1.5,4,3000,["gold:5"],[500,9500]],[25,2,2,2,5,2,4,4500,1200,1.5,4,3000,["gold:5"],[500,9500]],[26,2,2,3,1,2,4,4500,1400,1.5,4,3000,["gold:5"],[500,9500]],[27,2,2,3,2,3,6,3000,1400,1.5,4,3000,["gold:5"],[500,9500]],[28,2,2,3,3,1,12,1500,1400,1.5,4,3000,["gold:5"],[500,9500]],[29,2,2,3,4,3,6,3000,1400,1.5,4,3000,["gold:5"],[500,9500]],[30,2,2,3,5,2,4,4500,1400,1.5,4,3000,["gold:5"],[500,9500]],[31,3,3,1,1,3,6,3000,1800,1.5,8,3000,["gold:5"],[500,9500]],[32,3,3,1,2,1,12,1500,1800,1.5,8,3000,["gold:5"],[500,9500]],[33,3,3,1,3,2,4,4500,1800,1.5,8,3000,["gold:5"],[500,9500]],[34,3,3,1,4,1,12,1500,1800,1.5,8,3000,["gold:5"],[500,9500]],[35,3,3,1,5,3,6,3000,1800,1.5,8,3000,["gold:5"],[500,9500]],[36,3,3,2,1,1,12,1500,2100,1.5,8,3000,["gold:5"],[500,9500]],[37,3,3,2,2,3,6,3000,2100,1.5,8,3000,["gold:5"],[500,9500]],[38,3,3,2,3,2,4,4500,2100,1.5,8,3000,["gold:5"],[500,9500]],[39,3,3,2,4,3,6,3000,2100,1.5,8,3000,["gold:5"],[500,9500]],[40,3,3,2,5,1,12,1500,2100,1.5,8,3000,["gold:5"],[500,9500]],[41,3,3,3,1,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[42,3,3,3,2,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[43,3,3,3,3,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[44,3,3,3,4,2,4,4500,2400,1.5,8,3000,["gold:5"],[500,9500]],[45,3,3,3,5,2,4,4500,2400,1.5,8,3000,["box:3:1"],[500,9500]],[46,4,3,1,1,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[47,4,3,1,2,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[48,4,3,1,3,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[49,4,3,1,4,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[50,4,3,1,5,1,12,1500,2700,1.5,16,3000,["gold:5"],[500,9500]],[51,4,3,2,1,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[52,4,3,2,2,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[53,4,3,2,3,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[54,4,3,2,4,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[55,4,3,2,5,3,6,3000,3000,1.5,16,3000,["gold:5"],[500,9500]],[56,4,3,3,1,2,6,3000,3300,1.5,16,3000,["gold:5"],[500,9500]],[57,4,3,3,2,2,6,3000,3300,1.5,16,3000,["gold:5"],[500,9500]],[58,4,3,3,3,1,12,1500,3300,1.5,16,3000,["gold:5"],[500,9500]],[59,4,3,3,4,2,6,3000,3300,1.5,16,3000,["gold:5"],[500,9500]],[60,4,3,3,5,2,6,3000,3300,1.5,16,3000,["box:3:1"],[500,9500]],[61,5,3,1,1,2,8,4500,3600,2,32,3000,["gold:5"],[500,9500]],[62,5,3,1,2,3,12,3000,3600,2,32,3000,["gold:5"],[500,9500]],[63,5,3,1,3,1,24,1500,3600,2,32,3000,["gold:5"],[500,9500]],[64,5,3,1,4,3,12,3000,3600,2,32,3000,["gold:5"],[500,9500]],[65,5,3,1,5,2,8,4500,3600,2,32,3000,["gold:5"],[500,9500]],[66,5,3,2,1,3,12,3000,3900,2,32,3000,["gold:5"],[500,9500]],[67,5,3,2,2,1,24,1500,3900,2,32,3000,["gold:5"],[500,9500]],[68,5,3,2,3,2,8,4500,3900,2,32,3000,["gold:5"],[500,9500]],[69,5,3,2,4,1,24,1500,3900,2,32,3000,["gold:5"],[500,9500]],[70,5,3,2,5,3,12,3000,3900,2,32,3000,["gold:5"],[500,9500]],[71,5,3,3,1,1,24,1500,4200,2,32,3000,["gold:5"],[500,9500]],[72,5,3,3,2,3,12,3000,4200,2,32,3000,["gold:5"],[500,9500]],[73,5,3,3,3,2,8,4500,4200,2,32,3000,["gold:5"],[500,9500]],[74,5,3,3,4,3,12,3000,4200,2,32,3000,["gold:5"],[500,9500]],[75,5,3,3,5,1,24,1500,4200,2,32,3000,["gold:5"],[500,9500]],[76,5,3,4,1,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[77,5,3,4,2,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[78,5,3,4,3,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[79,5,3,4,4,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[80,5,3,4,5,2,8,4500,4500,2,64,3000,["gold:5"],[500,9500]],[81,5,3,5,1,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[82,5,3,5,2,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[83,5,3,5,3,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[84,5,3,5,4,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[85,5,3,5,5,1,24,1500,4800,2,64,3000,["gold:5"],[500,9500]],[86,5,3,6,1,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[87,5,3,6,2,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[88,5,3,6,3,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[89,5,3,6,4,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[90,5,3,6,5,3,12,3000,5100,2,64,3000,["gold:5"],[500,9500]],[91,5,3,7,1,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[92,5,3,7,2,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[93,5,3,7,3,1,24,1500,5400,2,64,3000,["gold:5"],[500,9500]],[94,5,3,7,4,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[95,5,3,7,5,2,12,3000,5400,2,64,3000,["gold:5"],[500,9500]],[96,5,3,8,1,2,8,4500,5700,2,64,3000,["gold:5"],[500,9500]],[97,5,3,8,2,3,12,3000,5700,2,64,3000,["gold:5"],[500,9500]],[98,5,3,8,3,1,24,1500,5700,2,64,3000,["gold:5"],[500,9500]],[99,5,3,8,4,3,12,3000,5700,2,64,3000,["gold:5"],[500,9500]],[100,5,3,8,5,2,8,4500,5700,2,64,3000,["gold:5"],[500,9500]],[101,5,3,9,1,3,12,3000,6000,2,64,3000,["gold:5"],[500,9500]],[102,5,3,9,2,1,24,1500,6000,2,64,3000,["gold:5"],[500,9500]],[103,5,3,9,3,2,8,4500,6000,2,64,3000,["gold:5"],[500,9500]],[104,5,3,9,4,1,24,1500,6000,2,64,3000,["gold:5"],[500,9500]],[105,5,3,9,5,3,12,3000,6000,2,64,3000,["gold:5"],[500,9500]],[106,5,3,10,1,1,24,1500,6300,2,64,3000,["gold:5"],[500,9500]],[107,5,3,10,2,3,12,3000,6300,2,64,3000,["gold:5"],[500,9500]],[108,5,3,10,3,2,8,4500,6300,2,64,3000,["gold:5"],[500,9500]],[109,5,3,10,4,3,12,3000,6300,2,64,3000,["gold:5"],[500,9500]],[110,5,3,10,5,1,24,1500,6300,2,64,3000,["gold:5"],[500,9500]],[111,5,3,11,1,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[112,5,3,11,2,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[113,5,3,11,3,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[114,5,3,11,4,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[115,5,3,11,5,2,8,4500,6600,2,64,3000,["gold:5"],[500,9500]],[116,5,3,12,1,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[117,5,3,12,2,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[118,5,3,12,3,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[119,5,3,12,4,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]],[120,5,3,12,5,1,24,1500,6900,2,64,3000,["gold:5"],[500,9500]]]
\ No newline at end of file
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/notice.json" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/notice.json"
new file mode 100644
index 0000000..8eece29
--- /dev/null
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/notice.json"
@@ -0,0 +1 @@
+[[1,"玩家{0}加入了工会","工会"]]
\ No newline at end of file
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/scoreshop.json" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/scoreshop.json"
new file mode 100644
index 0000000..b2362a2
--- /dev/null
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/StreamingAssets/Table/scoreshop.json"
@@ -0,0 +1 @@
+[[1,"1级金币获取增加","18小时内对战结算金币量+10%",64800,1,1.1,10000,5000,2],[2,"2级金币获取增加","18小时内对战结算金币量+15%",64800,1,1.5,15000,5000,2],[3,"通行证经验增加","18小时每次对战可获得100点通行证经验",64800,2,100,8000,2000,2]]
\ No newline at end of file
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers"
index c6ae5ed..5ed89a6 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers.assets" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers.assets"
index aa498b2..b20e7a6 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers.assets"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/globalgamemanagers.assets"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level0" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level0"
index 3c0cad5..ab5b140 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level0"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level0"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level1" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level1"
index 20c3169..664751d 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level1"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level1"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level2" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level2"
index 5f7f2a2..ebd65c6 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level2"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level2"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level3" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level3"
index 7f81aa0..f398f99 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level3"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/level3"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/resources.assets" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/resources.assets"
index 67c176c..3d37420 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/resources.assets"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/resources.assets"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets0.assets" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets0.assets"
index 73b4312..4ca7717 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets0.assets"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets0.assets"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets1.assets" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets1.assets"
index ea92f9e..8f1b576 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets1.assets"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets1.assets"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets"
index 5e55920..aedbe17 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets.resS" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets.resS"
index 71f5fb3..aec38d2 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets.resS"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets2.assets.resS"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets"
index c194fc0..669d4cb 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets"
Binary files differ
diff --git "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets.resS" "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets.resS"
index bae17f2..6216461 100644
--- "a/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets.resS"
+++ "b/GemBattle/\345\256\235\347\237\263\345\241\224\351\230\262_Data/sharedassets3.assets.resS"
Binary files differ

--
Gitblit v1.9.1