Browse Source

增加好友系统

liuqilin 7 years ago
parent
commit
5dbbafbdfd
33 changed files with 1286 additions and 177 deletions
  1. 1 1
      Assets/Resource/Logo.unity
  2. 340 63
      Assets/Resource/Prefab/PrefabUI/Canvas.prefab
  3. 15 15
      Assets/Resource/Prefab/PrefabUI/CommentItem.prefab
  4. 83 14
      Assets/Resource/Prefab/PrefabUI/PlazaroomMemberItem.prefab
  5. BIN
      Assets/Resource/Sprite/Editor/SpriteUI/切换按钮.png
  6. 68 0
      Assets/Resource/Sprite/Editor/SpriteUI/切换按钮.png.meta
  7. 4 1
      Assets/Resource/XML/PlayerConfig.xml
  8. 7 0
      Assets/Resource/XML/lan/ChineseSimplified.xml
  9. 7 0
      Assets/Resource/XML/lan/ChineseTraditional.xml
  10. 7 0
      Assets/Resource/XML/lan/English.xml
  11. BIN
      Assets/Resource/Xlsx/language_config.xlsx
  12. 13 0
      Assets/Script/Extension/ExtList.cs
  13. 7 0
      Assets/Script/Label/LanguageLabel.cs
  14. 4 0
      Assets/Script/Label/ObjectLabel.cs
  15. 3 1
      Assets/Script/Label/PlayerConfigLabel.cs
  16. 34 0
      Assets/Script/Manage/ConfigManager.cs
  17. 168 3
      Assets/Script/Manage/HttpManager.cs
  18. 60 11
      Assets/Script/Manage/SocialManager.cs
  19. 56 1
      Assets/Script/Object/CommentItem.cs
  20. 31 0
      Assets/Script/SFS/Manager/PlazaRoomController.cs
  21. 60 23
      Assets/Script/Social/AddFriendPanel.cs
  22. 3 5
      Assets/Script/Social/ApplicantItem.cs
  23. 19 4
      Assets/Script/Social/FriendItem.cs
  24. 140 3
      Assets/Script/Social/FriendPanel.cs
  25. 3 0
      Assets/Script/Social/MessagePanel.cs
  26. 65 18
      Assets/Script/Social/PlazaroomMemberItem.cs
  27. 34 8
      Assets/Script/Social/PlazaroomMemberPanel.cs
  28. 30 0
      Assets/Script/Social/PrivateMessageItem.cs
  29. 12 0
      Assets/Script/Social/PrivateMessageItem.cs.meta
  30. 5 0
      Assets/Script/Tool/Anim/MoveRoot.cs
  31. 2 1
      Assets/Script/Tool/Auxiliary.cs
  32. 2 2
      Assets/Script/Tool/LabelUtility/SerializeObject.prefab
  33. 3 3
      ProjectSettings/GraphicsSettings.asset

+ 1 - 1
Assets/Resource/Logo.unity

@@ -585,7 +585,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: d995bd93e747b4143812c28df116ed09, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
---- !u!1001 &1700323524
+--- !u!1001 &1557037949
 Prefab:
   m_ObjectHideFlags: 0
   serializedVersion: 2

+ 340 - 63
Assets/Resource/Prefab/PrefabUI/Canvas.prefab

@@ -3902,6 +3902,23 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!1 &1255575691189694
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224289446864717088}
+  - component: {fileID: 222855082016912684}
+  - component: {fileID: 114040983001296954}
+  m_Layer: 5
+  m_Name: AE_FriendListImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!1 &1256457397914544
 GameObject:
   m_ObjectHideFlags: 1
@@ -4188,7 +4205,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!1 &1272856801165448
 GameObject:
   m_ObjectHideFlags: 1
@@ -5285,6 +5302,23 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 0
+--- !u!1 &1354079778892622
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224281857710640778}
+  - component: {fileID: 222176511208348088}
+  - component: {fileID: 114570964988257048}
+  m_Layer: 5
+  m_Name: AH_ContentTitle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!1 &1354459311077512
 GameObject:
   m_ObjectHideFlags: 1
@@ -5440,6 +5474,23 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!1 &1364233723655836
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224495235461565368}
+  - component: {fileID: 222276093643794718}
+  - component: {fileID: 114742727132163712}
+  m_Layer: 5
+  m_Name: AF_FriendAmountText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!1 &1365433709374828
 GameObject:
   m_ObjectHideFlags: 1
@@ -5962,13 +6013,14 @@ GameObject:
   - component: {fileID: 224025307546104872}
   - component: {fileID: 222210092565292984}
   - component: {fileID: 114354669739634054}
+  - component: {fileID: 225485317336093456}
   m_Layer: 5
-  m_Name: AH_ContentTitle
+  m_Name: AH_LoadingTitle
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!1 &1392221965801020
 GameObject:
   m_ObjectHideFlags: 1
@@ -7468,8 +7520,9 @@ GameObject:
   - component: {fileID: 224758229364000410}
   - component: {fileID: 222070013669913678}
   - component: {fileID: 114358089945320424}
+  - component: {fileID: 114610817918296494}
   m_Layer: 5
-  m_Name: AF_FriendAmountText
+  m_Name: AE_FriendListButton
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -12282,7 +12335,7 @@ GameObject:
   - component: {fileID: 224246411772661914}
   - component: {fileID: 222268783776144936}
   - component: {fileID: 114060588801599916}
-  - component: {fileID: 114690816166115312}
+  - component: {fileID: 114202747536074566}
   m_Layer: 5
   m_Name: Q_FriendFilterButton
   m_TagString: Untagged
@@ -15932,6 +15985,33 @@ MonoBehaviour:
       m_Calls: []
     m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
       Culture=neutral, PublicKeyToken=null
+--- !u!114 &114040983001296954
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1255575691189694}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: b6177b7d778e787409ab9a25cac2ca43, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
 --- !u!114 &114042397356508628
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -20978,6 +21058,51 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u8BED\u8A00"
+--- !u!114 &114202747536074566
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1842146229852602}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, 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_DisabledColor: {r: 1, g: 1, b: 1, a: 1}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114060588801599916}
+  toggleTransition: 1
+  graphic: {fileID: 0}
+  m_Group: {fileID: 0}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  m_IsOn: 0
 --- !u!114 &114204085381011488
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -25288,7 +25413,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0.49411768, g: 0.49411768, b: 0.49411768, a: 1}
+  m_Color: {r: 0, g: 0, b: 0, a: 0.7058824}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -25405,7 +25530,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: 0/0
+  m_Text: "\u597D\u53CB\u5217\u8868"
 --- !u!114 &114358258132751248
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -32367,6 +32492,39 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: Lily of the Valley(White)
+--- !u!114 &114570964988257048
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1354079778892622}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.49411768, g: 0.49411768, b: 0.49411768, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 12800000, guid: 0e86defab91f2fb4189708f6dde11005, type: 3}
+    m_FontSize: 20
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 20
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u6D3E\u5BF9\u540D\u79F0"
 --- !u!114 &114571618375761744
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -33525,6 +33683,47 @@ MonoBehaviour:
   m_ChildForceExpandHeight: 1
   m_ChildControlWidth: 0
   m_ChildControlHeight: 0
+--- !u!114 &114610817918296494
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1483662031668172}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_DisabledColor: {r: 1, g: 1, b: 1, a: 1}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114358089945320424}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
 --- !u!114 &114611953451006262
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -36175,47 +36374,6 @@ MonoBehaviour:
       m_Calls: []
     m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
       Culture=neutral, PublicKeyToken=null
---- !u!114 &114690816166115312
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 1842146229852602}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_DisabledColor: {r: 1, g: 1, b: 1, a: 1}
-    m_ColorMultiplier: 1
-    m_FadeDuration: 0.1
-  m_SpriteState:
-    m_HighlightedSprite: {fileID: 0}
-    m_PressedSprite: {fileID: 0}
-    m_DisabledSprite: {fileID: 0}
-  m_AnimationTriggers:
-    m_NormalTrigger: Normal
-    m_HighlightedTrigger: Highlighted
-    m_PressedTrigger: Pressed
-    m_DisabledTrigger: Disabled
-  m_Interactable: 1
-  m_TargetGraphic: {fileID: 114060588801599916}
-  m_OnClick:
-    m_PersistentCalls:
-      m_Calls: []
-    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
-      Culture=neutral, PublicKeyToken=null
 --- !u!114 &114691238206716800
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -38136,6 +38294,39 @@ MonoBehaviour:
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
+--- !u!114 &114742727132163712
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1364233723655836}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.5411765, g: 0.72156864, b: 0.72156864, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 12800000, guid: 0e86defab91f2fb4189708f6dde11005, type: 3}
+    m_FontSize: 20
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 20
+    m_Alignment: 5
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0/0
 --- !u!114 &114744769575540172
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -49418,6 +49609,12 @@ CanvasRenderer:
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
   m_GameObject: {fileID: 1079150494094040}
+--- !u!222 &222176511208348088
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1354079778892622}
 --- !u!222 &222178916225260930
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -49796,6 +49993,12 @@ CanvasRenderer:
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
   m_GameObject: {fileID: 1944402664637746}
+--- !u!222 &222276093643794718
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1364233723655836}
 --- !u!222 &222279791640743724
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -52370,6 +52573,12 @@ CanvasRenderer:
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
   m_GameObject: {fileID: 1555391658121646}
+--- !u!222 &222855082016912684
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1255575691189694}
 --- !u!222 &222857857817286986
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -53376,15 +53585,15 @@ RectTransform:
   m_GameObject: {fileID: 1391698868763176}
   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.0000001, y: 1.0000001, z: 1.0000001}
   m_Children: []
   m_Father: {fileID: 224218017387643864}
-  m_RootOrder: 2
+  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: 123}
-  m_SizeDelta: {x: 127.2, y: 21.4}
+  m_AnchoredPosition: {x: -0.000030517578, y: 0}
+  m_SizeDelta: {x: 298.4, y: 21.4}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224027466554657894
 RectTransform:
@@ -56175,8 +56384,8 @@ RectTransform:
   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.46251, y: -136.24}
-  m_SizeDelta: {x: 664.07, y: 71.4}
+  m_AnchoredPosition: {x: -0.0012602, y: -136.24}
+  m_SizeDelta: {x: 665, y: 71.4}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224198236700370760
 RectTransform:
@@ -56474,12 +56683,13 @@ RectTransform:
   m_Children:
   - {fileID: 224919914695089100}
   - {fileID: 224142784162733624}
-  - {fileID: 224025307546104872}
+  - {fileID: 224281857710640778}
   - {fileID: 224759719693270692}
   - {fileID: 224969943628316522}
   - {fileID: 224120151329720060}
   - {fileID: 224623671784950266}
   - {fileID: 224195841415883298}
+  - {fileID: 224025307546104872}
   m_Father: {fileID: 224273836529947404}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -57652,6 +57862,24 @@ RectTransform:
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224281857710640778
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1354079778892622}
+  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: 224218017387643864}
+  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: 123}
+  m_SizeDelta: {x: 127.2, y: 21.4}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224284197521333150
 RectTransform:
   m_ObjectHideFlags: 1
@@ -57744,6 +57972,24 @@ RectTransform:
   m_AnchoredPosition: {x: 431, y: -51}
   m_SizeDelta: {x: 775, y: 82}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224289446864717088
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1255575691189694}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994}
+  m_Children: []
+  m_Father: {fileID: 224758229364000410}
+  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: 85.5, y: 0.0000015623}
+  m_SizeDelta: {x: 21.4, y: 21.4}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224293255102079490
 RectTransform:
   m_ObjectHideFlags: 1
@@ -58683,6 +58929,7 @@ RectTransform:
   - {fileID: 224431095560990062}
   - {fileID: 224979723006076630}
   - {fileID: 224929725520334382}
+  - {fileID: 224758229364000410}
   m_Father: {fileID: 224092854695183372}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -60911,6 +61158,24 @@ RectTransform:
   m_AnchoredPosition: {x: 40.54013, y: -15}
   m_SizeDelta: {x: 14.216478, y: 30}
   m_Pivot: {x: 0.00000017136335, y: 0.5}
+--- !u!224 &224495235461565368
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1364233723655836}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1.0000001}
+  m_Children: []
+  m_Father: {fileID: 224912065218701660}
+  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: 253.20001, y: -186.7}
+  m_SizeDelta: {x: 127.2, y: 21.4}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224495299453593920
 RectTransform:
   m_ObjectHideFlags: 1
@@ -65257,15 +65522,16 @@ RectTransform:
   m_GameObject: {fileID: 1483662031668172}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1.0000001}
-  m_Children: []
-  m_Father: {fileID: 224912065218701660}
-  m_RootOrder: 8
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224289446864717088}
+  m_Father: {fileID: 224347646635184296}
+  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: 253.20001, y: -186.7}
-  m_SizeDelta: {x: 127.2, y: 21.4}
+  m_AnchoredPosition: {x: 203.5, y: -186.69997}
+  m_SizeDelta: {x: 143.9, y: 21.4}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224758343716938888
 RectTransform:
@@ -67668,7 +67934,7 @@ RectTransform:
   - {fileID: 224954805167535218}
   - {fileID: 224738764473162026}
   - {fileID: 224960515231824426}
-  - {fileID: 224758229364000410}
+  - {fileID: 224495235461565368}
   m_Father: {fileID: 224295870535379978}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -67980,7 +68246,7 @@ RectTransform:
   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.000020503998, y: -36.850006}
+  m_AnchoredPosition: {x: -0.000020503998, y: -36.84999}
   m_SizeDelta: {x: 665, y: 278.3}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224930217583581028
@@ -69381,6 +69647,17 @@ CanvasGroup:
   m_Interactable: 1
   m_BlocksRaycasts: 1
   m_IgnoreParentGroups: 0
+--- !u!225 &225485317336093456
+CanvasGroup:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1391698868763176}
+  m_Enabled: 1
+  m_Alpha: 0
+  m_Interactable: 0
+  m_BlocksRaycasts: 0
+  m_IgnoreParentGroups: 0
 --- !u!225 &225488248243096574
 CanvasGroup:
   m_ObjectHideFlags: 1

+ 15 - 15
Assets/Resource/Prefab/PrefabUI/CommentItem.prefab

@@ -89,7 +89,7 @@ GameObject:
   - component: {fileID: 222824022254742042}
   - component: {fileID: 114988629463372794}
   m_Layer: 5
-  m_Name: SendMessageText
+  m_Name: SendMessageButtonTitle
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -177,7 +177,7 @@ GameObject:
   - component: {fileID: 222063584478428280}
   - component: {fileID: 114110795075804430}
   m_Layer: 5
-  m_Name: AddFriendTitle
+  m_Name: AddFriendButtonTitle
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -263,25 +263,25 @@ MonoBehaviour:
   Draw: 0
   SetY: 0
   Y: 0
-  LineHeight: 16.718914
+  LineHeight: 16.6998
   MaxLineHeight: Infinity
   RemovePos: 060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000
   ImageIndex: 00000000
   RemoveIndex: 0100000002000000030000000400000005000000
   NewTextIndex: 0600000007000000
   NewTextPos:
-  - {x: -1.5768986, y: 6.6875653, z: 0}
-  - {x: 9.290394, y: 6.6875653, z: 0}
-  - {x: 9.290394, y: -7.523511, z: 0}
-  - {x: 9.290394, y: -7.523511, z: 0}
-  - {x: -1.5768986, y: -7.523511, z: 0}
-  - {x: -1.5768986, y: 6.6875653, z: 0}
-  - {x: 7.6185036, y: 6.6875653, z: 0}
-  - {x: 18.485798, y: 6.6875653, z: 0}
-  - {x: 18.485798, y: -7.523511, z: 0}
-  - {x: 18.485798, y: -7.523511, z: 0}
-  - {x: 7.6185036, y: -7.523511, z: 0}
-  - {x: 7.6185036, y: 6.6875653, z: 0}
+  - {x: -1.495573, y: 7.1570573, z: 0}
+  - {x: 8.842398, y: 7.1570573, z: 0}
+  - {x: 8.842398, y: -7.1570573, z: 0}
+  - {x: 8.842398, y: -7.1570573, z: 0}
+  - {x: -1.495573, y: -7.1570573, z: 0}
+  - {x: -1.495573, y: 7.1570573, z: 0}
+  - {x: 8.047171, y: 7.1570573, z: 0}
+  - {x: 18.385141, y: 7.1570573, z: 0}
+  - {x: 18.385141, y: -7.1570573, z: 0}
+  - {x: 18.385141, y: -7.1570573, z: 0}
+  - {x: 8.047171, y: -7.1570573, z: 0}
+  - {x: 8.047171, y: 7.1570573, z: 0}
 --- !u!114 &114110795075804430
 MonoBehaviour:
   m_ObjectHideFlags: 1

+ 83 - 14
Assets/Resource/Prefab/PrefabUI/PlazaroomMemberItem.prefab

@@ -200,6 +200,23 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!1 &1862272480470318
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224552642449478030}
+  - component: {fileID: 222012745145733760}
+  - component: {fileID: 114397806257426078}
+  m_Layer: 5
+  m_Name: NewMessageFlagImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
 --- !u!114 &114023817866583676
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -268,6 +285,33 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u52A0\u4E3A\u597D\u53CB"
+--- !u!114 &114397806257426078
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1862272480470318}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9372549, g: 0.3254902, b: 0.3137255, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: c3253a9c218d503429b8ea8aa7699809, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
 --- !u!114 &114464249880688604
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -345,25 +389,25 @@ MonoBehaviour:
   Draw: 0
   SetY: 0
   Y: 0
-  LineHeight: 16.718914
+  LineHeight: 16.6998
   MaxLineHeight: Infinity
   RemovePos: 060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000
   ImageIndex: 00000000
   RemoveIndex: 0100000002000000030000000400000005000000
   NewTextIndex: 0600000007000000
   NewTextPos:
-  - {x: -1.5768986, y: 6.6875653, z: 0}
-  - {x: 9.290394, y: 6.6875653, z: 0}
-  - {x: 9.290394, y: -7.523511, z: 0}
-  - {x: 9.290394, y: -7.523511, z: 0}
-  - {x: -1.5768986, y: -7.523511, z: 0}
-  - {x: -1.5768986, y: 6.6875653, z: 0}
-  - {x: 7.6185036, y: 6.6875653, z: 0}
-  - {x: 18.485798, y: 6.6875653, z: 0}
-  - {x: 18.485798, y: -7.523511, z: 0}
-  - {x: 18.485798, y: -7.523511, z: 0}
-  - {x: 7.6185036, y: -7.523511, z: 0}
-  - {x: 7.6185036, y: 6.6875653, z: 0}
+  - {x: -1.495573, y: 7.1570573, z: 0}
+  - {x: 8.842398, y: 7.1570573, z: 0}
+  - {x: 8.842398, y: -7.1570573, z: 0}
+  - {x: 8.842398, y: -7.1570573, z: 0}
+  - {x: -1.495573, y: -7.1570573, z: 0}
+  - {x: -1.495573, y: 7.1570573, z: 0}
+  - {x: 8.047171, y: 7.1570573, z: 0}
+  - {x: 18.385141, y: 7.1570573, z: 0}
+  - {x: 18.385141, y: -7.1570573, z: 0}
+  - {x: 18.385141, y: -7.1570573, z: 0}
+  - {x: 8.047171, y: -7.1570573, z: 0}
+  - {x: 8.047171, y: 7.1570573, z: 0}
 --- !u!114 &114536951835464724
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -648,6 +692,12 @@ MonoBehaviour:
       m_Calls: []
     m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
       Culture=neutral, PublicKeyToken=null
+--- !u!222 &222012745145733760
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1862272480470318}
 --- !u!222 &222017485022575988
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -823,6 +873,7 @@ RectTransform:
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 0.15000002, y: 0.15000002, z: 1}
   m_Children:
+  - {fileID: 224552642449478030}
   - {fileID: 224640505710063096}
   m_Father: {fileID: 224159096202925886}
   m_RootOrder: 5
@@ -832,6 +883,24 @@ RectTransform:
   m_AnchoredPosition: {x: 541.53, y: -0.000012398}
   m_SizeDelta: {x: 337.72, y: 162}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224552642449478030
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1862272480470318}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 6.6666656, y: 6.6666656, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224537883502344212}
+  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: -180.2, y: 60.8}
+  m_SizeDelta: {x: 17.6, y: 17.6}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224640505710063096
 RectTransform:
   m_ObjectHideFlags: 1
@@ -843,7 +912,7 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 224537883502344212}
-  m_RootOrder: 0
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}

BIN
Assets/Resource/Sprite/Editor/SpriteUI/切换按钮.png


+ 68 - 0
Assets/Resource/Sprite/Editor/SpriteUI/切换按钮.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: b6177b7d778e787409ab9a25cac2ca43
+timeCreated: 1511423692
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 4 - 1
Assets/Resource/XML/PlayerConfig.xml

@@ -1,5 +1,5 @@
 <PlayerConfig>
-  <Version value="13" />
+  <Version value="15" />
   <ReplayVersion value="1" />
   
   <ID value="Default" />
@@ -95,4 +95,7 @@
     <Skill ID="Ability23" SkillType="Ability" ItemStatus="Lock" Level="0" />
     <Skill ID="Ability24" SkillType="Ability" ItemStatus="Lock" Level="0" />
   </SkillList>
+  <LastApplicantSerialNumber value=""/>
+  <LastPrivateMessageDate>
+  </LastPrivateMessageDate>
 </PlayerConfig>

+ 7 - 0
Assets/Resource/XML/lan/ChineseSimplified.xml

@@ -236,6 +236,7 @@
     <AG_SendApplySucceed desc=""><![CDATA[发送申请成功]]></AG_SendApplySucceed>
     <AG_ConnectError desc=""><![CDATA[连接服务器失败]]></AG_ConnectError>
     <AG_ApplyButtonTitle desc=""><![CDATA[发送申请]]></AG_ApplyButtonTitle>
+    <AG_SearchNameEmpty desc=""><![CDATA[昵称不能为空]]></AG_SearchNameEmpty>
     <AH_NicknameTitle desc=""><![CDATA[发送者]]></AH_NicknameTitle>
     <AH_ContentTitle desc=""><![CDATA[内容]]></AH_ContentTitle>
     <AH_TimeTitle desc=""><![CDATA[时间]]></AH_TimeTitle>
@@ -243,6 +244,9 @@
     <AH_PlaceholderTitle desc=""><![CDATA[请输入留言内容]]></AH_PlaceholderTitle>
     <AH_SendMessageButtonTitle desc=""><![CDATA[发送]]></AH_SendMessageButtonTitle>
     <AH_CloseButtonTitle desc=""><![CDATA[关闭]]></AH_CloseButtonTitle>
+    <AH_Loading desc=""><![CDATA[加载中]]></AH_Loading>
+    <AH_LoadSucceed desc=""><![CDATA[加载成功]]></AH_LoadSucceed>
+    <AH_LoadFailed desc=""><![CDATA[加载失败]]></AH_LoadFailed>
   </UI>
   <FriendItem>
     <MinutesAgo desc=""><![CDATA[[&value&]分钟前]]></MinutesAgo>
@@ -271,6 +275,9 @@
     <AddFriend desc=""><![CDATA[加为好友]]></AddFriend>
     <SendMessage desc=""><![CDATA[私信]]></SendMessage>
     <VisitWarning desc=""><![CDATA[即将离开派对访问TA的花园,确定继续?]]></VisitWarning>
+    <SendApplySucceed desc=""><![CDATA[发送申请成功]]></SendApplySucceed>
+    <ConnectError desc=""><![CDATA[连接服务器失败]]></ConnectError>
+    <SendMessageSucceed desc=""><![CDATA[发送消息成功]]></SendMessageSucceed>
   </PlazaroomMemberItem>
   <FlowerName>
     <Flower1 desc=""><![CDATA[粉色小花]]></Flower1>

+ 7 - 0
Assets/Resource/XML/lan/ChineseTraditional.xml

@@ -236,6 +236,7 @@
     <AG_SendApplySucceed desc=""><![CDATA[]]></AG_SendApplySucceed>
     <AG_ConnectError desc=""><![CDATA[]]></AG_ConnectError>
     <AG_ApplyButtonTitle desc=""><![CDATA[]]></AG_ApplyButtonTitle>
+    <AG_SearchNameEmpty desc=""><![CDATA[]]></AG_SearchNameEmpty>
     <AH_NicknameTitle desc=""><![CDATA[]]></AH_NicknameTitle>
     <AH_ContentTitle desc=""><![CDATA[]]></AH_ContentTitle>
     <AH_TimeTitle desc=""><![CDATA[]]></AH_TimeTitle>
@@ -243,6 +244,9 @@
     <AH_PlaceholderTitle desc=""><![CDATA[]]></AH_PlaceholderTitle>
     <AH_SendMessageButtonTitle desc=""><![CDATA[]]></AH_SendMessageButtonTitle>
     <AH_CloseButtonTitle desc=""><![CDATA[]]></AH_CloseButtonTitle>
+    <AH_Loading desc=""><![CDATA[]]></AH_Loading>
+    <AH_LoadSucceed desc=""><![CDATA[]]></AH_LoadSucceed>
+    <AH_LoadFailed desc=""><![CDATA[]]></AH_LoadFailed>
   </UI>
   <FriendItem>
     <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
@@ -271,6 +275,9 @@
     <AddFriend desc=""><![CDATA[]]></AddFriend>
     <SendMessage desc=""><![CDATA[]]></SendMessage>
     <VisitWarning desc=""><![CDATA[]]></VisitWarning>
+    <SendApplySucceed desc=""><![CDATA[]]></SendApplySucceed>
+    <ConnectError desc=""><![CDATA[]]></ConnectError>
+    <SendMessageSucceed desc=""><![CDATA[]]></SendMessageSucceed>
   </PlazaroomMemberItem>
   <FlowerName>
     <Flower1 desc=""><![CDATA[粉色小花]]></Flower1>

+ 7 - 0
Assets/Resource/XML/lan/English.xml

@@ -236,6 +236,7 @@ Program 水怪
     <AG_SendApplySucceed desc=""><![CDATA[]]></AG_SendApplySucceed>
     <AG_ConnectError desc=""><![CDATA[]]></AG_ConnectError>
     <AG_ApplyButtonTitle desc=""><![CDATA[]]></AG_ApplyButtonTitle>
+    <AG_SearchNameEmpty desc=""><![CDATA[]]></AG_SearchNameEmpty>
     <AH_NicknameTitle desc=""><![CDATA[]]></AH_NicknameTitle>
     <AH_ContentTitle desc=""><![CDATA[]]></AH_ContentTitle>
     <AH_TimeTitle desc=""><![CDATA[]]></AH_TimeTitle>
@@ -243,6 +244,9 @@ Program 水怪
     <AH_PlaceholderTitle desc=""><![CDATA[]]></AH_PlaceholderTitle>
     <AH_SendMessageButtonTitle desc=""><![CDATA[]]></AH_SendMessageButtonTitle>
     <AH_CloseButtonTitle desc=""><![CDATA[]]></AH_CloseButtonTitle>
+    <AH_Loading desc=""><![CDATA[]]></AH_Loading>
+    <AH_LoadSucceed desc=""><![CDATA[]]></AH_LoadSucceed>
+    <AH_LoadFailed desc=""><![CDATA[]]></AH_LoadFailed>
   </UI>
   <FriendItem>
     <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
@@ -271,6 +275,9 @@ Program 水怪
     <AddFriend desc=""><![CDATA[]]></AddFriend>
     <SendMessage desc=""><![CDATA[]]></SendMessage>
     <VisitWarning desc=""><![CDATA[]]></VisitWarning>
+    <SendApplySucceed desc=""><![CDATA[]]></SendApplySucceed>
+    <ConnectError desc=""><![CDATA[]]></ConnectError>
+    <SendMessageSucceed desc=""><![CDATA[]]></SendMessageSucceed>
   </PlazaroomMemberItem>
   <FlowerName>
     <Flower1 desc=""><![CDATA[Pink Flower]]></Flower1>

BIN
Assets/Resource/Xlsx/language_config.xlsx


+ 13 - 0
Assets/Script/Extension/ExtList.cs

@@ -4,6 +4,7 @@ using UnityEngine.Events;
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 
 public static class ExtList
 {
@@ -252,4 +253,16 @@ public static class ExtList
 
         return result;
     }
+
+    public static bool MyContains<T>(this List<T> list, Func<T, bool> func)
+    {
+        for (int i = 0; i < list.Count; i++)
+        {
+            if (func.Invoke(list[i]))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
 }

+ 7 - 0
Assets/Script/Label/LanguageLabel.cs

@@ -234,6 +234,7 @@ public class LanguageLabel
 	public static string UI__AG_SendApplySucceed = "UI__AG_SendApplySucceed";
 	public static string UI__AG_ConnectError = "UI__AG_ConnectError";
 	public static string UI__AG_ApplyButtonTitle = "UI__AG_ApplyButtonTitle";
+	public static string UI__AG_SearchNameEmpty = "UI__AG_SearchNameEmpty";
 	public static string UI__AH_NicknameTitle = "UI__AH_NicknameTitle";
 	public static string UI__AH_ContentTitle = "UI__AH_ContentTitle";
 	public static string UI__AH_TimeTitle = "UI__AH_TimeTitle";
@@ -241,6 +242,9 @@ public class LanguageLabel
 	public static string UI__AH_PlaceholderTitle = "UI__AH_PlaceholderTitle";
 	public static string UI__AH_SendMessageButtonTitle = "UI__AH_SendMessageButtonTitle";
 	public static string UI__AH_CloseButtonTitle = "UI__AH_CloseButtonTitle";
+	public static string UI__AH_Loading = "UI__AH_Loading";
+	public static string UI__AH_LoadSucceed = "UI__AH_LoadSucceed";
+	public static string UI__AH_LoadFailed = "UI__AH_LoadFailed";
 	
 	public static string FriendItem = "FriendItem";
 	public static string FriendItem__MinutesAgo = "FriendItem__MinutesAgo";
@@ -269,6 +273,9 @@ public class LanguageLabel
 	public static string PlazaroomMemberItem__AddFriend = "PlazaroomMemberItem__AddFriend";
 	public static string PlazaroomMemberItem__SendMessage = "PlazaroomMemberItem__SendMessage";
 	public static string PlazaroomMemberItem__VisitWarning = "PlazaroomMemberItem__VisitWarning";
+	public static string PlazaroomMemberItem__SendApplySucceed = "PlazaroomMemberItem__SendApplySucceed";
+	public static string PlazaroomMemberItem__ConnectError = "PlazaroomMemberItem__ConnectError";
+	public static string PlazaroomMemberItem__SendMessageSucceed = "PlazaroomMemberItem__SendMessageSucceed";
 	
 	public static string FlowerName = "FlowerName";
 	public static string FlowerName__Flower1 = "FlowerName__Flower1";

+ 4 - 0
Assets/Script/Label/ObjectLabel.cs

@@ -695,6 +695,8 @@ public class ObjectLabel
 	public static string AE_CloseButtonTitle = "AE_CloseButtonTitle";
 	public static string AE_ScrollRect = "AE_ScrollRect";
 	public static string AE_Grid = "AE_Grid";
+	public static string AE_FriendListButton = "AE_FriendListButton";
+	public static string AE_FriendListImage = "AE_FriendListImage";
 	public static string AF_FriendPanelParent = "AF_FriendPanelParent";
 	public static string AF_FriendPanelMask = "AF_FriendPanelMask";
 	public static string AF_FriendPanel = "AF_FriendPanel";
@@ -744,11 +746,13 @@ public class ObjectLabel
 	public static string AH_CloseButtonTitle = "AH_CloseButtonTitle";
 	public static string AH_ScrollRect = "AH_ScrollRect";
 	public static string AH_Grid = "AH_Grid";
+	public static string AH_InputFieldParent = "AH_InputFieldParent";
 	public static string AH_InputField = "AH_InputField";
 	public static string AH_PlaceholderTitle = "AH_PlaceholderTitle";
 	public static string AH_InputText = "AH_InputText";
 	public static string AH_SendMessageButton = "AH_SendMessageButton";
 	public static string AH_SendMessageButtonTitle = "AH_SendMessageButtonTitle";
+	public static string AH_LoadingTitle = "AH_LoadingTitle";
 	public static string B_SignIn0 = "B_SignIn0";
 	public static string B_SignIn = "B_SignIn";
 	public static string Bb_SignIn = "Bb_SignIn";

+ 3 - 1
Assets/Script/Label/PlayerConfigLabel.cs

@@ -7,7 +7,9 @@ public class PlayerConfigLabel
 {
     public static string DefaultID = "Default";
     public static string DefaultSerialNumber = "Default";
-    
+
+    public static string LastApplicantSerialNumber = "LastApplicantSerialNumber";
+    public static string LastPrivateMessageDate = "LastPrivateMessageDate";
     public static string CurrentMinigameType = "CurrentMinigameType";
     public static string OneTimeReward = "OneTimeReward";
     public static string PackLock = "PackLock";

+ 34 - 0
Assets/Script/Manage/ConfigManager.cs

@@ -1294,6 +1294,20 @@ public class ConfigManager : Regist
             ToVersion13(nativeDoc, defaultDoc);
         }
 
+        if (nativeVersion < 14)
+        {
+            Debug.LogWarning("UpdateArchive to 14");
+
+            ToVersion14(nativeDoc, defaultDoc);
+        }
+
+        if (nativeVersion < 15)
+        {
+            Debug.LogWarning("UpdateArchive to 15");
+
+            ToVersion15(nativeDoc, defaultDoc);
+        }
+
         return nativeDoc;
     }
 
@@ -1540,4 +1554,24 @@ public class ConfigManager : Regist
 
         return nativeDoc;
     }
+
+    public static XmlDocument ToVersion14(XmlDocument nativeDoc, XmlDocument defaultDoc)
+    {
+        nativeDoc.SelectSingleNode(PlayerConfigLabel.RootNode).SelectSingleNode(PlayerConfigLabel.Version).Attributes[0].Value = 14.ToString();
+        XmlNode xmlNode = defaultDoc.SelectSingleNode(PlayerConfigLabel.RootNode).SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate);
+
+        nativeDoc.SelectSingleNode(PlayerConfigLabel.RootNode).AppendChild(nativeDoc.ImportNode(xmlNode, true));
+
+        return nativeDoc;
+    }
+
+    public static XmlDocument ToVersion15(XmlDocument nativeDoc, XmlDocument defaultDoc)
+    {
+        nativeDoc.SelectSingleNode(PlayerConfigLabel.RootNode).SelectSingleNode(PlayerConfigLabel.Version).Attributes[0].Value = 15.ToString();
+        XmlNode xmlNode = defaultDoc.SelectSingleNode(PlayerConfigLabel.RootNode).SelectSingleNode(PlayerConfigLabel.LastApplicantSerialNumber);
+
+        nativeDoc.SelectSingleNode(PlayerConfigLabel.RootNode).AppendChild(nativeDoc.ImportNode(xmlNode, true));
+
+        return nativeDoc;
+    }
 }

+ 168 - 3
Assets/Script/Manage/HttpManager.cs

@@ -51,6 +51,7 @@ public class MyCredentials : ICredentialsByHost
 public enum CommentType
 {
     Garden = 0,
+    PrivateMessage = 1,
 }
 
 public class HttpManager : Regist
@@ -158,6 +159,7 @@ public class HttpManager : Regist
     public static string DeleteBuddyURL = NewBaseURL + "/buddy/remove";
     public static string AcceptApplicantURL = NewBaseURL + "/buddy/agree";
     public static string GetRecommendBuddyListURL = NewBaseURL + "/buddy/recommend";
+    public static string SearchBuddyURL = NewBaseURL + "/buddy/like";
     public static string ReportMailAddress = "bug@dashgame.com";
 
     #endregion
@@ -165,6 +167,11 @@ public class HttpManager : Regist
     public void Awake()
     {
         //URLRequestData requestData = new URLRequestData();
+        //requestData.Add("u", "1710065808151506837");
+        //requestData.Add("n", "甜美的铃铛");
+        //URLRequest.CreateStrURLRequest(true, SearchBuddyURL, requestData, data => Debug.Log("搜索好友返回结果 " + data), URLRequest.Method.POST);
+
+        //URLRequestData requestData = new URLRequestData();
         //requestData.Add("u", 1710065808151506837);
         //URLRequest.CreateStrURLRequest(true, GetApplicantListURL, requestData, data => Debug.Log("获取申请列表返回结果 " + data), URLRequest.Method.POST);
 
@@ -173,8 +180,48 @@ public class HttpManager : Regist
         //URLRequest.CreateStrURLRequest(true, GetBuddyListURL, requestData, data => Debug.Log("查看好友列表返回结果 " + data), URLRequest.Method.POST);
 
         //URLRequestData requestData = new URLRequestData();
-        //requestData.Add("b", 1709110839194378775);
-        //requestData.Add("u", 1709207727231988804);
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110837794360346);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110742885333235);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110751808885702);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110821992596239);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110822575416146);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110823081672996);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110833705246366);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110834264628935);
+        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
+
+        //requestData = new URLRequestData();
+        //requestData.Add("b", 1710065808151506837);
+        //requestData.Add("u", 1709110834736509581);
         //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
 
         //requestData.Add("b", 1709207727231988804);
@@ -553,7 +600,17 @@ public class HttpManager : Regist
         urlData.Add("p", page);
         urlData.Add("t", type.GetHashCode());
 
-        URLRequest.CreateURLRequest(true, GetCommentURL, urlData, data => { callback(data); }, URLRequest.Method.POST);
+        URLRequest.CreateURLRequest
+        (
+            true,
+            GetCommentURL,
+            urlData,
+            data =>
+            {
+                callback(data);
+            },
+            URLRequest.Method.POST
+        );
     }
 
 
@@ -1174,6 +1231,7 @@ public class HttpManager : Regist
             requestData,
             data =>
             {
+                //Debug.Log(data);
                 try
                 {
                     JsonData jData = JsonMapper.ToObject(data.Trim());
@@ -1233,6 +1291,113 @@ public class HttpManager : Regist
         );
     }
 
+    public static void GetPrivateMessage(string targetSerialNumber, string page, CommentType type, Action<JsonData> callback, string selfSerialNumber = null)
+    {
+        if (selfSerialNumber == null)
+        {
+            selfSerialNumber = SerialNumber;
+        }
+
+        URLRequestData urlData = new URLRequestData();
+        urlData.Add("u", selfSerialNumber);
+        urlData.Add("p", page);
+        urlData.Add("t", type.GetHashCode());
+
+        URLRequest.CreateURLRequest
+        (
+            true,
+            GetCommentURL,
+            urlData,
+            data =>
+            {
+                Debug.Log(data.ToJson());
+                callback(data);
+            },
+            URLRequest.Method.POST
+        );
+    }
+
+    public static void SendPrivateMessage(string sendID, string receiveID, string content, CommentType type)
+    {
+        if (string.IsNullOrEmpty(sendID) || string.IsNullOrEmpty(receiveID))
+        {
+            return;
+        }
+
+        if (sendID.ToLower() == PlayerConfigLabel.DefaultID.ToLower() || receiveID.ToLower() == PlayerConfigLabel.DefaultID.ToLower())
+        {
+            return;
+        }
+
+        URLRequestData urlData = new URLRequestData();
+
+        urlData.Add("c", sendID);
+        urlData.Add("u", receiveID);
+        urlData.Add("i", content);
+        urlData.Add("t", type.GetHashCode());
+
+        URLRequest.CreateStrURLRequest
+        (
+            true,
+            AddCommentURL,
+            urlData,
+            data =>
+            {
+                if (data == "{\"error\":0}")
+                {
+                    Bubble.Show(Language.GetStr(LanguageLabel.UI__Q_CommentDone));
+                    SocialManager.UpdateCommentPage(false);
+                }
+                else
+                {
+                    Bubble.Show(Language.GetStr(LanguageLabel.UI__Q_CommentFail));
+                }
+            },
+            URLRequest.Method.POST
+        );
+    }
+
+    public static void SearchBuddyByNickname(string searchNickname, Action<List<AccountData>> succeedCallback, Action failedCallback, string selfSerialNumber = null)
+    {
+        if (selfSerialNumber == null)
+        {
+            selfSerialNumber = SerialNumber;
+        }
+
+        URLRequestData requestData = new URLRequestData();
+        requestData.Add("u", selfSerialNumber);
+        requestData.Add("n", searchNickname);
+
+        URLRequest.CreateURLRequest
+        (
+            true,
+            SearchBuddyURL,
+            requestData,
+            jData =>
+            {
+                //Debug.Log(jData.ToJson());
+                if (jData.Inst_Object.ContainsKey("l"))
+                {
+                    jData = jData["l"];
+                    List<AccountData> accountDatas = new List<AccountData>();
+                    for (int i = 0; i < jData.Count; i++)
+                    {
+                        string serialNumber = (string)jData[i]["i"];
+                        string nickname = (string)jData[i]["n"];
+                        string dateString = (string)jData[i]["t"];
+                        accountDatas.Add(new AccountData(nickname, serialNumber, dateString));
+                    }
+                    succeedCallback.Invoke(accountDatas);
+                }
+                else
+                {
+                    failedCallback.Invoke();
+                }
+            },
+            URLRequest.Method.POST
+        );
+    }
+
 
     private static string SmtpHost = "smtp.163.com";
     private static string ReporterMailAccount = "dashgamegarden@163.com";

+ 60 - 11
Assets/Script/Manage/SocialManager.cs

@@ -36,6 +36,7 @@ public class SocialManager : Regist
 
     public static Text PraiseText;
     public static Button PraiseButton;
+    public static Toggle CommentFriendFilterToggle;
     public static DateTime CommentTime;
     public static InputField CommentInputField;
     public static ScrollRectPlus CommentScrollRect;
@@ -47,6 +48,7 @@ public class SocialManager : Regist
     public static float CommentTimeSpan = 30f;
     public static List<CommentData> PlayerCommentDatas = new List<CommentData>();
     public static List<CommentData> VisiteeCommentDatas = new List<CommentData>();
+    public static List<CommentItem> CommentItems = new List<CommentItem>();
 
     private static int CommentPanelMaxRevertAmt = 15;
     private static int CommentPanelMaxChildAmt = 20;
@@ -90,6 +92,9 @@ public class SocialManager : Regist
         PraiseButton = ResourceManager.Get<Button>(ObjectLabel.C_Praise);
         CommentInputField = ResourceManager.Get<InputField>(ObjectLabel.Q_InputField);
         CommentScrollRect = ResourceManager.Get<ScrollRectPlus>(ObjectLabel.Q_ScrollRect);
+        CommentFriendFilterToggle = ResourceManager.Get<Toggle>(ObjectLabel.Q_FriendFilterButton);
+
+        CommentFriendFilterToggle.onValueChanged.AddListener(OnCommentFriendFilterToggleClick);
 
         CommentScrollRect.onValueChanged.AddListener(OnScroll);
     }
@@ -217,13 +222,16 @@ public class SocialManager : Regist
 
                 if (CommentScrollRect.content.childCount >= CommentPanelMaxChildAmt)
                 {
-                    ResourceManager.Save(CommentScrollRect.content.GetChild(0).gameObject);
+                    CommentItem commentItem = CommentScrollRect.content.GetChild(0).GetComponent<CommentItem>();
+                    ResourceManager.Save(commentItem);
+                    CommentItems.Remove(commentItem);
                     PlayerFirstDisplayIndex++;
                 }
 
                 PlayerLastDisplayIndex++;
                 CommentData commentData = PlayerCommentDatas[PlayerLastDisplayIndex];
-                ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                CommentItem newCommentItem = ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                CommentItems.Add(newCommentItem);
             }
 
             CommentScrollRect.content.transform.position = RecordCommentPosition;
@@ -408,14 +416,17 @@ public class SocialManager : Regist
                 if (CommentScrollRect.content.childCount >= CommentPanelMaxChildAmt)
                 {
                     saveAmt++;
-                    ResourceManager.Save(CommentScrollRect.content.GetChild(0).gameObject);
+                    CommentItem commentItem = CommentScrollRect.content.GetChild(0).GetComponent<CommentItem>();
+                    ResourceManager.Save(commentItem);
+                    CommentItems.Remove(commentItem);
                     PlayerFirstDisplayIndex++;
                 }
 
                 PlayerLastDisplayIndex++;
 
                 CommentData commentData = PlayerCommentDatas[PlayerLastDisplayIndex];
-                ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                CommentItem newCommentItem = ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                CommentItems.Add(newCommentItem);
             }
 
             int offset = isDownload ? 1 : 0;
@@ -437,14 +448,17 @@ public class SocialManager : Regist
                 if (CommentScrollRect.content.childCount >= CommentPanelMaxChildAmt)
                 {
                     saveAmt++;
-                    ResourceManager.Save(CommentScrollRect.content.GetChild(0).gameObject);
+                    CommentItem commentItem = CommentScrollRect.content.GetChild(0).GetComponent<CommentItem>();
+                    ResourceManager.Save(commentItem);
+                    CommentItems.Remove(commentItem);
                     VisiteeFirstDisplayIndex++;
                 }
 
                 VisiteeLastDisplayIndex++;
 
                 CommentData commentData = VisiteeCommentDatas[VisiteeLastDisplayIndex];
-                ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                CommentItem newCommentItem = ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                CommentItems.Add(newCommentItem);
             }
 
             int offset = isDownload ? 1 : 0;
@@ -475,10 +489,13 @@ public class SocialManager : Regist
 
                 for (int i = 0; i < revertAmt; i++)
                 {
-                    ResourceManager.Save(CommentScrollRect.content.GetChild(CommentScrollRect.content.childCount - 1));
+                    CommentItem commentItem = CommentScrollRect.content.GetChild(CommentScrollRect.content.childCount - 1).GetComponent<CommentItem>();
+                    ResourceManager.Save(commentItem);
+                    CommentItems.Remove(commentItem);
                     CommentData commentData = VisiteeCommentDatas[VisiteeLastDisplayIndex];
 
-                    CommentItem commentItem = ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                    commentItem = ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                    CommentItems.Add(commentItem);
                     commentItem.transform.SetAsFirstSibling();
 
                     PlayerLastDisplayIndex--;
@@ -500,10 +517,13 @@ public class SocialManager : Regist
 
                 for (int i = 0; i < revertAmt; i++)
                 {
-                    ResourceManager.Save(CommentScrollRect.content.GetChild(CommentScrollRect.content.childCount - 1));
+                    CommentItem commentItem = CommentScrollRect.content.GetChild(CommentScrollRect.content.childCount - 1).GetComponent<CommentItem>();
+                    ResourceManager.Save(commentItem);
+                    CommentItems.Remove(commentItem);
                     CommentData commentData = VisiteeCommentDatas[VisiteeLastDisplayIndex];
 
-                    CommentItem commentItem = ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                    commentItem = ResourceManager.GetCommentItem(commentData.NickName, commentData.SerialNumber, commentData.Content);
+                    CommentItems.Add(commentItem);
                     commentItem.transform.SetAsFirstSibling();
 
                     VisiteeLastDisplayIndex--;
@@ -525,7 +545,9 @@ public class SocialManager : Regist
 
         for (int i = 0; i < childAmt; i++)
         {
-            ResourceManager.Save(CommentScrollRect.content.GetChild(0));
+            CommentItem commentItem = CommentScrollRect.content.GetChild(0).GetComponent<CommentItem>();
+            ResourceManager.Save(commentItem);
+            CommentItems.Remove(commentItem);
         }
 
         CommentScrollRect.verticalNormalizedPosition = 1;
@@ -615,4 +637,31 @@ public class SocialManager : Regist
             }
         }
     }
+
+
+    public static void OnCommentFriendFilterToggleClick(bool value)
+    {
+        AudioManager.PlayClip(ResourceLabel.BtnClip);
+        if (value)
+        {
+            EnableCommentFriendFilter();
+        }
+        else
+        {
+            DisableCommentFriendFilter();
+        }
+    }
+
+    public static void EnableCommentFriendFilter()
+    {
+        foreach (var commentItem in CommentItems)
+        {
+            
+        }
+    }
+
+    public static void DisableCommentFriendFilter()
+    {
+
+    }
 }

+ 56 - 1
Assets/Script/Object/CommentItem.cs

@@ -13,6 +13,10 @@ public class CommentItemLabel
     public static string VisitButtonTitle = "VisitButtonTitle";
     public static string VisitButton = "VisitButton";
     public static string Content = "Content";
+    public static string AddFriendButton = "AddFriendButton";
+    public static string AddFriendButtonTitle = "AddFriendButtonTitle";
+    public static string SendMessageButton = "SendMessageButton";
+    public static string SendMessageButtonTitle = "SendMessageButtonTitle";
 }
 
 public class CommentData
@@ -62,7 +66,11 @@ public class CommentItem : Regist
 
     public Text Title;
     public Text ContentText;
+    public Text AddFriendButtonTitle;
+    public Text SendMessageButtonTitle;
     public Button VisitButton;
+    public Button AddFriendButton;
+    public Button SendMessageButton;
     public BestfitText VisitButtonTitle;
 
     public string Content;
@@ -83,14 +91,22 @@ public class CommentItem : Regist
 
         Title = childDic[CommentItemLabel.Title].GetComponent<Text>();
         ContentText = childDic[CommentItemLabel.VisitButtonTitle].GetComponent<Text>();
+        AddFriendButtonTitle = childDic[CommentItemLabel.AddFriendButtonTitle].GetComponent<Text>();
+        SendMessageButtonTitle = childDic[CommentItemLabel.SendMessageButtonTitle].GetComponent<Text>();
         VisitButton = childDic[CommentItemLabel.VisitButton].GetComponent<Button>();
+        AddFriendButton = childDic[CommentItemLabel.AddFriendButton].GetComponent<Button>();
+        SendMessageButton = childDic[CommentItemLabel.SendMessageButton].GetComponent<Button>();
         VisitButtonTitle = childDic[CommentItemLabel.Content].GetComponent<BestfitText>();
         VisitButtonTitle.VerticalMaxSize = 20;
 
+        LanguageManager.Add(AddFriendButtonTitle, new MulLanStr(LanguageLabel.CommentItem__AddFriend));
+        LanguageManager.Add(SendMessageButtonTitle, new MulLanStr(LanguageLabel.CommentItem__SendMessage));
+
         ContentText.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
 
         VisitButton.onClick.AddListener(Visit);
-        
+        AddFriendButton.onClick.AddListener(OnAddFriendButtonClick);
+
         Manager.OnLevelChange += level =>
         {
             ContentText.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
@@ -138,4 +154,43 @@ public class CommentItem : Regist
 
         VisitButtonTitle.text = content;
     }
+
+
+    private void OnAddFriendButtonClick()
+    {
+        if (!FriendPanel.IsFriendFull(true))
+        {
+            AudioManager.PlayClip(ResourceLabel.BtnClip);
+            AddFriendButton.interactable = false;
+            HttpManager.ApplyBuddy(SerialNumber, SendApplySucceed, SendApplyFailed);
+        }
+    }
+
+    private void SendApplyFailed()
+    {
+        AddFriendButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.PlazaroomMemberItem__ConnectError));
+    }
+
+    private void SendApplySucceed()
+    {
+        AddFriendButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.PlazaroomMemberItem__SendApplySucceed));
+        AddFriendButton.SetActive(false);
+    }
+
+
+    public void RefreshRelationship()
+    {
+        if (IsFriend())
+        {
+            AddFriendButton.SetActive(false);
+            SendMessageButton.SetActive(true);
+        }
+    }
+
+    public bool IsFriend()
+    {
+        return FriendPanel.FriendItems.MyContains(item => AccountData.SerialNumber == item.AccountData.SerialNumber);
+    }
 }

+ 31 - 0
Assets/Script/SFS/Manager/PlazaRoomController.cs

@@ -758,4 +758,35 @@ public class PlazaRoomController
         position.z += zOffset;
         return position;
     }
+
+
+    public void TryExitToVisit(string visiteeSerialNumber, Action onExitToVisit)
+    {
+        if (Manager.Coin < VisitManager.VisitCost)
+        {
+            Bubble.Show(Language.GetStr(LanguageLabel.Common__ShortCoin), null, null, Lib.GoldSprite);
+        }
+        else
+        {
+            Bubble.Show
+            (
+                null,
+                Language.GetStr(LanguageLabel.PlazaroomMemberItem__VisitWarning),
+                null,
+                null,
+                () =>
+                {
+                    ExitToVisit(visiteeSerialNumber);
+                    onExitToVisit.Invoke();
+                }
+            );
+        }
+    }
+
+    public void ExitToVisit(string visiteeSerialNumber)
+    {
+        SFSManager.GardenSmartFox.PlazaRoomController.ExitToVisitFlag = true;
+        SFSManager.GardenSmartFox.PlazaRoomController.VisiteeSerialNumber = visiteeSerialNumber;
+        SFSManager.GardenSmartFox.PlazaRoomController.LeavePlazaRoom();
+    }
 }

+ 60 - 23
Assets/Script/Social/AddFriendPanel.cs

@@ -11,12 +11,15 @@ public class AccountData
     public string SerialNumber;
     public DateTime LastLoginDate;
 
-    public AccountData(string nickname, string serialNumber, string dateString)
+    public AccountData(string nickname, string serialNumber, string dateString = null)
     {
         Nickname = nickname;
         SerialNumber = serialNumber;
-        //Debug.Log(dateString);
-        LastLoginDate = DateTime.Parse(dateString);
+
+        if (dateString != null)
+        {
+            LastLoginDate = DateTime.Parse(dateString);
+        }
     }
 }
 
@@ -77,32 +80,38 @@ public class AddFriendPanel : Regist
     }
 
 
-    private void RefreshRecommendBuddyList()
-    {
-        HttpManager.GetRecommendBuddyList(RefreshRecommendSucceedCallback, () => { });
-    }
-
-    private void RefreshRecommendSucceedCallback(List<AccountData> accountDatas)
-    {
-        RecommendDatas = accountDatas;
-    }
-
-
-    public static void OpenPanel()
+    private static void ResetRecommendStatus()
     {
         if (RecommendDatas.Count > 0)
         {
             NicknameText.text = RecommendDatas[0].Nickname;
             CurrentRecommendData = RecommendDatas[0];
+            ChangeButton.interactable = true;
         }
         else
         {
             NicknameText.text = "";
+            CurrentRecommendData = null;
             ChangeButton.interactable = false;
         }
+    }
+
+    private static void RefreshRecommendBuddyList()
+    {
+        HttpManager.GetRecommendBuddyList(RefreshRecommendSucceedCallback, () => { });
+    }
 
+    private static void RefreshRecommendSucceedCallback(List<AccountData> accountDatas)
+    {
+        RecommendDatas = accountDatas;
+    }
+
+
+    public static void OpenPanel()
+    {
         TipText.text = Language.GetStr(LanguageLabel.UI__AG_TipTitle0);
         ChangeButtonTitle.text = Language.GetStr(LanguageLabel.UI__AG_ChangeButtonTitle);
+        ResetRecommendStatus();
 
         float preferredWidth = ChangeButtonTitle.preferredWidth;
         float underlineWidth = ChangeButtonUnderline.rectTransform.rect.width;
@@ -121,36 +130,64 @@ public class AddFriendPanel : Regist
 
     private static void Search()
     {
+        if (string.IsNullOrEmpty(InputField.text))
+        {
+            Bubble.Show(null, Language.GetStr(LanguageLabel.UI__AG_SearchNameEmpty));
+            return;
+        }
+
         AudioManager.PlayClip(ResourceLabel.BtnClip);
         ApplyButton.interactable = false;
+        HttpManager.SearchBuddyByNickname(InputField.text, OnSearchSucceed, OnSearchFailed);
+        InputField.text = "";
     }
 
     private static void OnSearchFailed()
     {
         ApplyButton.interactable = true;
         TipText.text = Language.GetStr(LanguageLabel.UI__AG_TipTitle1);
-        NicknameText.text = RecommendDatas[0].Nickname;
+        ResetRecommendStatus();
     }
 
-    private static void OnSearchSucceed()
+    private static void OnSearchSucceed(List<AccountData> accountDatas)
     {
-        ApplyButton.interactable = true;
-        TipText.text = Language.GetStr(LanguageLabel.UI__AG_TipTitle2);
-        NicknameText.text = RecommendDatas[0].Nickname;
+        if (accountDatas.Count > 0)
+        {
+            ApplyButton.interactable = true;
+            TipText.text = Language.GetStr(LanguageLabel.UI__AG_TipTitle2);
+            CurrentRecommendData = accountDatas[0];
+            NicknameText.text = CurrentRecommendData.Nickname;
+            ChangeButton.interactable = true;
+        }
+        else
+        {
+            OnSearchFailed();
+        }
     }
 
 
     private void OnApplyButtonClick()
     {
-        ApplyButton.interactable = false;
-        AudioManager.PlayClip(ResourceLabel.BtnClip);
-        HttpManager.ApplyBuddy(CurrentRecommendData.SerialNumber, ApplySucceed, ApplyFailed);
+        if (CurrentRecommendData == null)
+        {
+            Bubble.Show(null, Language.GetStr(LanguageLabel.UI__AG_SearchNameEmpty));
+            return;
+        }
+
+        if (!FriendPanel.IsFriendFull(true))
+        {
+            ApplyButton.interactable = false;
+            AudioManager.PlayClip(ResourceLabel.BtnClip);
+            HttpManager.ApplyBuddy(CurrentRecommendData.SerialNumber, ApplySucceed, ApplyFailed);
+        }
     }
 
     private void ApplySucceed()
     {
         ApplyButton.interactable = true;
         Bubble.Show(null, Language.GetStr(LanguageLabel.UI__AG_SendApplySucceed));
+        RecommendDatas.Remove(CurrentRecommendData);
+        ResetRecommendStatus();
     }
 
     private void ApplyFailed()

+ 3 - 5
Assets/Script/Social/ApplicantItem.cs

@@ -112,12 +112,9 @@ public class ApplicantItem : VirtualScrollRectItem
 
     public void OnAcceptButtonClick()
     {
-        if (FriendPanel.FriendItems.Count >= FriendPanel.MaxFriend)
-        {
-            Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__FriendFullSelf));
-        }
-        else
+        if (!FriendPanel.IsFriendFull(true))
         {
+            AudioManager.PlayClip(ResourceLabel.BtnClip);
             AcceptButton.interactable = false;
             HttpManager.AcceptApplicant(AccountData.SerialNumber, AcceptApplicantSucceed, AcceptApplicantFailed);
         }
@@ -150,6 +147,7 @@ public class ApplicantItem : VirtualScrollRectItem
 
     public void OnRefuseButtonClick()
     {
+        AudioManager.PlayClip(ResourceLabel.BtnClip);
         RefuseButton.interactable = false;
         HttpManager.DeleteBuddy(AccountData.SerialNumber, RefuseApplicantSucceed, RefuseApplicantFailed);
     }

+ 19 - 4
Assets/Script/Social/FriendItem.cs

@@ -107,10 +107,25 @@ public class FriendItem : VirtualScrollRectItem
 
     public void OnVisitButtonClick()
     {
-        FriendPanel.CloseRootFriendPanel();
-        CounterAction counterAction = new CounterAction(FriendPanel.OpenRootFriendPanel);
-        counterAction.Bind(ref VisitManager.OnExitVisteeGarden);
-        VisitManager.Visit(ConfigSource.SerialNumber, AccountData.SerialNumber);
+        if (SFSManager.PlazaRoomController.JoinedPlazaRoom)
+        {
+            SFSManager.PlazaRoomController.TryExitToVisit
+            (
+                AccountData.SerialNumber,
+                () =>
+                {
+                    FriendPanel.CloseRootFriendPanel();
+                    PlazaroomMemberPanel.ClosePanel();
+                }
+            );
+        }
+        else
+        {
+            FriendPanel.CloseRootFriendPanel();
+            CounterAction counterAction = new CounterAction(FriendPanel.OpenRootFriendPanel);
+            counterAction.Bind(ref VisitManager.OnExitVisteeGarden);
+            VisitManager.Visit(ConfigSource.SerialNumber, AccountData.SerialNumber);
+        }
     }
 
     public void OnDeleteButtonClick()

+ 140 - 3
Assets/Script/Social/FriendPanel.cs

@@ -45,8 +45,21 @@ public class FriendPanel : Regist
         }
     }
     public static int maxFriend = 25;
-    public static List<VirtualScrollRectItem> FriendItems = new List<VirtualScrollRectItem>();
+    private static float RefreshFriendTime = 15f;
+    private static float RefreshFriendTimer = RefreshFriendTime;
+    public static List<FriendItem> FriendItems = new List<FriendItem>();
 
+    public static bool HaveNewApplicant;
+    public static bool HaveNewPrivateMessage
+    {
+        get { return haveNewPrivateMessage; }
+        set
+        {
+            haveNewPrivateMessage = value;
+            UpdateFriendButtonOutlineStatus();
+        }
+    }
+    public static bool haveNewPrivateMessage;
     public static TweenOutline OpenPanelButtonOutlineTween;
 
     public static int ActivateLevel = TutorialManager.VisitTutorialLevel;
@@ -118,6 +131,44 @@ public class FriendPanel : Regist
             RefreshApplicantTimer = 0;
             RefreshApplicant();
         }
+
+        RefreshFriendTimer += Time.deltaTime;
+        if (RefreshFriendTimer >= RefreshFriendTime)
+        {
+            RefreshFriendTimer = 0;
+            RefreshFriendList();
+        }
+    }
+
+
+    public static void PlayFriendButtonOutline()
+    {
+        if (!OpenPanelButtonOutlineTween.IsPlaying)
+        {
+            OpenPanelButtonOutlineTween.PingPong = true;
+            OpenPanelButtonOutlineTween.StartForward();
+        }
+    }
+
+    public static void StopFriendButtonOutline()
+    {
+        if (OpenPanelButtonOutlineTween.IsPlaying)
+        {
+            OpenPanelButtonOutlineTween.PingPong = false;
+            OpenPanelButtonOutlineTween.StartBackward();
+        }
+    }
+
+    public static void UpdateFriendButtonOutlineStatus()
+    {
+        if (HaveNewApplicant || HaveNewPrivateMessage)
+        {
+            PlayFriendButtonOutline();
+        }
+        else if (!HaveNewApplicant && !HaveNewPrivateMessage)
+        {
+            StopFriendButtonOutline();
+        }
     }
 
 
@@ -150,10 +201,26 @@ public class FriendPanel : Regist
 
     private static void RefreshFriendListCallback(List<AccountData> accountDatas)
     {
+        for (int i = 0; i < FriendItems.Count; i++)
+        {
+            SaveFriendItem(FriendItems[i--]);
+        }
         foreach (var accountData in accountDatas)
         {
             AddFriendItem(accountData);
         }
+        foreach (var memberItem in PlazaroomMemberPanel.MemberItemDictionary.Values)
+        {
+            string memberItemSerialNumber = memberItem.AccountData.SerialNumber;
+            if (accountDatas.MyContains(data => data.SerialNumber == memberItemSerialNumber))
+            {
+                memberItem.RefreshRelationship();
+            }
+        }
+        if (PlazaroomMemberPanel.IsFriendFilterOn)
+        {
+            PlazaroomMemberPanel.EnableFriendFilter();
+        }
     }
 
 
@@ -163,8 +230,10 @@ public class FriendPanel : Regist
         ApplicantItems.Remove(item);
         if (ApplicantItems.Count == 0)
         {
-            NewApplicantFlagImage.SetActive(false);
+            OnDontHaveApplicant();
         }
+        SaveLastApplicantSerialNumber();
+        SetNewApplicantStatus();
     }
 
     private static void RefreshApplicant()
@@ -188,11 +257,48 @@ public class FriendPanel : Regist
         }
         if (ApplicantItems.Count > 0)
         {
-            NewApplicantFlagImage.SetActive(true);
+            OnHaveApplicant();
         }
         else
         {
+            OnDontHaveApplicant();
+        }
+        SetNewApplicantStatus();
+    }
+
+    private static void OnHaveApplicant()
+    {
+        AcceptAllButton.image.material = null;
+        AcceptAllButton.interactable = true;
+    }
+
+    private static void OnDontHaveApplicant()
+    {
+        AcceptAllButton.image.material = Lib.GrayMat;
+        AcceptAllButton.interactable = false;
+    }
+
+    private static void SetNewApplicantStatus()
+    {
+        string lastApplicantSerialNumber = ConfigManager.GetStringFormConfig(PlayerConfigLabel.LastApplicantSerialNumber);
+        if (ApplicantItems.Count == 0 || ApplicantItems.Back(0).AccountData.SerialNumber == lastApplicantSerialNumber)
+        {
             NewApplicantFlagImage.SetActive(false);
+            HaveNewApplicant = false;
+        }
+        else
+        {
+            NewApplicantFlagImage.SetActive(true);
+            HaveNewApplicant = true;
+        }
+        UpdateFriendButtonOutlineStatus();
+    }
+
+    private static void SaveLastApplicantSerialNumber()
+    {
+        if (ApplicantItems.Count > 0)
+        {
+            ConfigManager.SaveStringToConfig(PlayerConfigLabel.LastApplicantSerialNumber, ApplicantItems.Back(0).AccountData.SerialNumber);
         }
     }
 
@@ -226,6 +332,10 @@ public class FriendPanel : Regist
         AudioManager.PlayClip(ResourceLabel.BtnClip);
         if (value)
         {
+            SaveLastApplicantSerialNumber();
+            SetNewApplicantStatus();
+
+            SaveLastApplicantSerialNumber();
             AcceptAllButton.SetActive(true);
             AddFriendButton.SetActive(false);
             ApplicantScrollRect.SetActive(true);
@@ -254,4 +364,31 @@ public class FriendPanel : Regist
             applicantItem.OnAcceptButtonClick();
         }
     }
+
+
+    public static void TryAddFriend()
+    {
+
+    }
+
+    public static void AddFriend()
+    {
+
+    }
+
+    public static bool IsFriendFull(bool showBubble)
+    {
+        if (FriendItems.Count >= MaxFriend)
+        {
+            if (showBubble)
+            {
+                Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__FriendFullSelf));
+            }
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
 }

+ 3 - 0
Assets/Script/Social/MessagePanel.cs

@@ -19,6 +19,7 @@ public class MessagePanel : Regist
     public static Text InputText;
     public static Text SendMessageButtonTitle;
     public static Text CloseButtonTitle;
+    public static Text LoadingTitle;
     public static Button CloseButton;
     public static Button SendMessageButton;
     public static Transform Grid;
@@ -40,6 +41,7 @@ public class MessagePanel : Regist
         InputText = ResourceManager.Get<Text>(ObjectLabel.AH_InputText);
         SendMessageButtonTitle = ResourceManager.Get<Text>(ObjectLabel.AH_SendMessageButtonTitle);
         CloseButtonTitle = ResourceManager.Get<Text>(ObjectLabel.AH_CloseButtonTitle);
+        LoadingTitle = ResourceManager.Get<Text>(ObjectLabel.AH_LoadingTitle);
         CloseButton = ResourceManager.Get<Button>(ObjectLabel.AH_CloseButton);
         SendMessageButton = ResourceManager.Get<Button>(ObjectLabel.AH_SendMessageButton);
         Grid = ResourceManager.Get(ObjectLabel.AH_Grid);
@@ -47,6 +49,7 @@ public class MessagePanel : Regist
         InputField = ResourceManager.Get<InputField>(ObjectLabel.AH_InputField);
         ScrollRect = ResourceManager.Get<ScrollRectPlus>(ObjectLabel.AH_ScrollRect);
 
+        LoadingTitle.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
         TweenRoot tweenRoot = MessagePanelMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
         tweenRoot.OnBackwardFinish += () => { OnPanelClosed.SafeInvoke(); };
 

+ 65 - 18
Assets/Script/Social/PlazaroomMemberItem.cs

@@ -18,6 +18,7 @@ public class PlazaroomMemberItemLabel
     public static string AddFriendTitle = "AddFriendTitle";
     public static string SendMessageButton = "SendMessageButton";
     public static string SendMessageText = "SendMessageText";
+	public static string NewMessageFlagImage = "NewMessageFlagImage";
 }
 
 public class PlazaroomMemberItem : MonoBehaviour
@@ -29,17 +30,17 @@ public class PlazaroomMemberItem : MonoBehaviour
     public Text VisitButtonTitle;
     public Text AddFriendTitle;
     public Text SendMessageText;
+    public Image NewMessageFlagImage;
     public Button VisitButton;
     public Button AddFriendButton;
     public Button SendMessageButton;
 
+    private bool Inited;
     private float RefreshTime = 10f;
     private float RefreshTimer;
-    private string Nickname;
-    private string SerialNumber;
     private DateTime JoinedRoomTime;
 
-    private bool Inited;
+    public AccountData AccountData;
 
     #endregion
 
@@ -73,25 +74,35 @@ public class PlazaroomMemberItem : MonoBehaviour
         VisitButtonTitle = childDictionary[PlazaroomMemberItemLabel.VisitButtonTitle].GetComponent<Text>();
         AddFriendTitle = childDictionary[PlazaroomMemberItemLabel.AddFriendTitle].GetComponent<Text>();
         SendMessageText = childDictionary[PlazaroomMemberItemLabel.SendMessageText].GetComponent<Text>();
+        NewMessageFlagImage = childDictionary[PlazaroomMemberItemLabel.NewMessageFlagImage].GetComponent<Image>();
         VisitButton = childDictionary[PlazaroomMemberItemLabel.VisitButton].GetComponent<Button>();
         AddFriendButton = childDictionary[PlazaroomMemberItemLabel.AddFriendButton].GetComponent<Button>();
         SendMessageButton = childDictionary[PlazaroomMemberItemLabel.SendMessageButton].GetComponent<Button>();
 
+        LanguageManager.Add(AddFriendTitle, new MulLanStr(LanguageLabel.PlazaroomMemberItem__AddFriend));
+
         VisitButtonTitle.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
 
         VisitButton.onClick.AddListener(OnVisitButtonClick);
+        AddFriendButton.onClick.AddListener(OnAddFriendButtonClick);
+        SendMessageButton.onClick.AddListener(OnSendMessageButtonClick);
     }
 
-    public void Reset(string nickname, string serialNumber, DateTime joinedTime)
+    public void Reset(AccountData accountData, DateTime joinedTime)
     {
         Init();
-        //Debug.Log(joinedTime);
-        Nickname = nickname;
-        SerialNumber = serialNumber;
+
+        AccountData = accountData;
         JoinedRoomTime = joinedTime;
 
-        NicknameTitle.text = Nickname;
+        NicknameTitle.text = accountData.Nickname;
         ContentTitle.text = GetContent();
+
+        AddFriendButton.SetActive(true);
+        AddFriendButton.interactable = true;
+        SendMessageButton.SetActive(false);
+
+        RefreshRelationship();
     }
 
     private string GetContent()
@@ -113,23 +124,59 @@ public class PlazaroomMemberItem : MonoBehaviour
     }
 
 
-    private void OnVisitButtonClick()
+    public void RefreshRelationship()
     {
-        if (Manager.Coin < VisitManager.VisitCost)
+        if (IsFriend())
         {
-            Bubble.Show(Language.GetStr(LanguageLabel.Common__ShortCoin), null, null, Lib.GoldSprite);
+            AddFriendButton.SetActive(false);
+            SendMessageButton.SetActive(true);
         }
-        else
+    }
+
+    public bool IsFriend()
+    {
+        return FriendPanel.FriendItems.MyContains(item => AccountData.SerialNumber == item.AccountData.SerialNumber);
+    }
+
+
+    private void OnVisitButtonClick()
+    {
+        SFSManager.PlazaRoomController.TryExitToVisit(AccountData.SerialNumber, OnExitToVisit);
+    }
+
+    private void OnExitToVisit()
+    {
+        PlazaroomMemberPanel.ClosePanel();
+    }
+
+
+    private void OnAddFriendButtonClick()
+    {
+        if (!FriendPanel.IsFriendFull(true))
         {
-            Bubble.Show(null, Language.GetStr(LanguageLabel.PlazaroomMemberItem__VisitWarning), null, null, Visit);
+            AudioManager.PlayClip(ResourceLabel.BtnClip);
+            AddFriendButton.interactable = false;
+            HttpManager.ApplyBuddy(AccountData.SerialNumber, SendApplySucceed, SendApplyFailed);
         }
     }
 
-    private void Visit()
+    private void SendApplyFailed()
     {
-        SFSManager.GardenSmartFox.PlazaRoomController.ExitToVisitFlag = true;
-        SFSManager.GardenSmartFox.PlazaRoomController.VisiteeSerialNumber = SerialNumber;
-        SFSManager.GardenSmartFox.PlazaRoomController.LeavePlazaRoom();
-        PlazaroomMemberPanel.ClosePanel();
+        AddFriendButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.PlazaroomMemberItem__ConnectError));
+    }
+
+    private void SendApplySucceed()
+    {
+        AddFriendButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.PlazaroomMemberItem__SendApplySucceed));
+        AddFriendButton.SetActive(false);
+    }
+
+
+    private void OnSendMessageButtonClick()
+    {
+        AudioManager.PlayClip(ResourceLabel.BtnClip);
+        MessagePanel.OpenPanel(AccountData);
     }
 }

+ 34 - 8
Assets/Script/Social/PlazaroomMemberPanel.cs

@@ -18,11 +18,12 @@ public class PlazaroomMemberPanel : Regist
     private static Button CloseButton;
     private static Button FriendFilterButton;
     private static Button MemberButton;
+    private static Button FriendListButton;
     private static Transform Grid;
     private static Transform PanelMask;
 
-    private static bool IsFilterOn;
-    private static Dictionary<string, PlazaroomMemberItem> MemberItemDictionary = new Dictionary<string, PlazaroomMemberItem>();
+    public static bool IsFriendFilterOn;
+    public static Dictionary<string, PlazaroomMemberItem> MemberItemDictionary = new Dictionary<string, PlazaroomMemberItem>();
 
     #endregion
 
@@ -36,6 +37,7 @@ public class PlazaroomMemberPanel : Regist
         CloseButton = ResourceManager.Get<Button>(ObjectLabel.AE_CloseButton);
         MemberButton = ResourceManager.Get<Button>(ObjectLabel.X_MemberButton);
         FriendFilterButton = ResourceManager.Get<Button>(ObjectLabel.AE_FriendFilterButton);
+        FriendListButton = ResourceManager.Get<Button>(ObjectLabel.AE_FriendListButton);
         FilterImage = ResourceManager.Get<Image>(ObjectLabel.AE_FriendFilterIcon);
         Grid = ResourceManager.Get(ObjectLabel.AE_Grid);
         PanelMask = ResourceManager.Get(ObjectLabel.AE_PlazaroomMemberPanelMask);
@@ -52,8 +54,10 @@ public class PlazaroomMemberPanel : Regist
         MemberButton.onClick.AddListener(OpenPanel);
         CloseButton.onClick.AddListener(ClosePanel);
         FriendFilterButton.onClick.AddListener(OnFilterButtonClick);
+        FriendListButton.onClick.AddListener(OnFriendListButtonClick);
     }
 
+
     public static void OpenPanel()
     {
         AudioManager.PlayClip(ResourceLabel.BtnClip);
@@ -68,10 +72,11 @@ public class PlazaroomMemberPanel : Regist
         MemberButton.TweenForCG();
     }
 
+
     private static void OnFilterButtonClick()
     {
         AudioManager.PlayClip(ResourceLabel.BtnClip);
-        if (IsFilterOn)
+        if (IsFriendFilterOn)
         {
             DisableFriendFilter();
         }
@@ -81,17 +86,33 @@ public class PlazaroomMemberPanel : Regist
         }
     }
 
-    private static void EnableFriendFilter()
+    public static void EnableFriendFilter()
     {
         FilterImage.SetActive(true);
-        IsFilterOn = true;
+        IsFriendFilterOn = true;
+        foreach (var memberItem in MemberItemDictionary.Values)
+        {
+            if (!memberItem.IsFriend())
+            {
+                memberItem.SetActive(false);
+            }
+        }
     }
 
-    private static void DisableFriendFilter()
+    public static void DisableFriendFilter()
     {
         FilterImage.SetActive(false);
-        IsFilterOn = false;
+        IsFriendFilterOn = false;
+        foreach (var memberItem in MemberItemDictionary.Values)
+        {
+            memberItem.SetActive(true);
+        }
+    }
+
 
+    private void OnFriendListButtonClick()
+    {
+        FriendPanel.OpenRootFriendPanel();
     }
 
 
@@ -99,8 +120,13 @@ public class PlazaroomMemberPanel : Regist
     {
         PlazaroomMemberItem memberItem = ResourceManager.Get(ResourceLabel.PlazaroomMemberItem, Folder.UI, false, Grid, false, ObjType.PlazaroomMemberItem, typeof(PlazaroomMemberItem)).GetComponent<PlazaroomMemberItem>();
         memberItem.transform.SetAsFirstSibling();
-        memberItem.Reset(nickname, serialNumber, joinedTime);
+        AccountData accountData = new AccountData(nickname, serialNumber);
+        memberItem.Reset(accountData, joinedTime);
         MemberItemDictionary.Add(serialNumber, memberItem);
+        if (IsFriendFilterOn && !memberItem.IsFriend())
+        {
+            memberItem.SetActive(false);
+        }
     }
 
     public static void SaveMemberItem(string serialNumber)

+ 30 - 0
Assets/Script/Social/PrivateMessageItem.cs

@@ -0,0 +1,30 @@
+using System.Collections;
+using System.Collections.Generic;
+
+using UnityEngine;
+
+public class PrivateMessageData
+{
+    public string Nickname;
+    public string Content;
+}
+
+public class PrivateMessageItemLabel
+{
+	public static string MessageItem = "MessageItem";
+	public static string Nickname = "Nickname";
+	public static string Content = "Content";
+	public static string Time = "Time";
+	public static string Frame = "Frame";
+}
+
+public class PrivateMessageItem : VirtualScrollRectItem
+{
+    #region Config
+    
+    
+    
+    #endregion
+
+
+}

+ 12 - 0
Assets/Script/Social/PrivateMessageItem.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b68d6c75d398a444b91fea9dd2bb7728
+timeCreated: 1511404789
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 0
Assets/Script/Tool/Anim/MoveRoot.cs

@@ -7,6 +7,11 @@ public abstract class MoveRoot
 {
     #region 变量
 
+    public bool IsPlaying
+    {
+        get { return AnimManager.MoveForList.Contains(this) || AnimManager.MoveBacList.Contains(this); }
+    }
+
     public virtual bool InDestination
     {
         get { return InDestination_; }

+ 2 - 1
Assets/Script/Tool/Auxiliary.cs

@@ -184,7 +184,8 @@ public class Auxiliary : Regist
 
         if (Input.GetKeyDown(KeyCode.V))
         {
-            //MessagePanel.OpenPanel();
+            AccountData accountData = new AccountData("测试名字", "1710065808151506837", DateTime.Now.ToString());
+            MessagePanel.OpenPanel(accountData);
         }
 
         //if (Input.GetKeyDown(KeyCode.B))

+ 2 - 2
Assets/Script/Tool/LabelUtility/SerializeObject.prefab

@@ -51,8 +51,8 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: e4a9dafa00b004e4e94c57cd88b01101, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  Script: {fileID: 11500000, guid: 3420c8d0e7f483a46942a0adcfbee477, type: 3}
+  Script: {fileID: 11500000, guid: 1615e3353e063d443bf237fb8aade024, type: 3}
   Languages:
   - {fileID: 4900000, guid: 6bf784d003b5c104e94531afb827212a, type: 3}
   Prefabs:
-  - {fileID: 1626347861987158, guid: 7b82777cdb999ce468b189ea45f9d28d, type: 2}
+  - {fileID: 1948781497737682, guid: 8647d80b558fa724a84d05f9e6aee9bc, type: 2}

+ 3 - 3
ProjectSettings/GraphicsSettings.asset

@@ -43,13 +43,13 @@ GraphicsSettings:
     type: 0}
   m_TierSettings_Tier1:
     renderingPath: 1
-    useCascadedShadowMaps: 0
+    useCascadedShadowMaps: 1
   m_TierSettings_Tier2:
     renderingPath: 1
-    useCascadedShadowMaps: 0
+    useCascadedShadowMaps: 1
   m_TierSettings_Tier3:
     renderingPath: 1
-    useCascadedShadowMaps: 0
+    useCascadedShadowMaps: 1
   m_DefaultRenderingPath: 1
   m_DefaultMobileRenderingPath: 1
   m_TierSettings: []