瀏覽代碼

Merge branch 'master' of http://git.gfggame.com:3000/gfg/client

guodong 3 年之前
父節點
當前提交
d6bf5e3253
共有 100 個文件被更改,包括 2141 次插入96 次删除
  1. 0 0
      FGUIProject/assets/CommonGame/imagesExport/hz_xzkuang.png
  2. 1 0
      FGUIProject/assets/CommonGame/package.xml
  3. 1 1
      FGUIProject/assets/DressUp/components/ComboBoxSuit.xml
  4. 0 1
      FGUIProject/assets/DressUp/package.xml
  5. 56 1
      FGUIProject/assets/Friend/FriendAddUI.xml
  6. 40 1
      FGUIProject/assets/Friend/FriendUI.xml
  7. 10 0
      FGUIProject/assets/Friend/components/BtnClear.xml
  8. 8 0
      FGUIProject/assets/Friend/components/BtnModel.xml
  9. 8 0
      FGUIProject/assets/Friend/components/BtnModel1.xml
  10. 8 0
      FGUIProject/assets/Friend/components/BtnRefresh.xml
  11. 8 0
      FGUIProject/assets/Friend/components/BtnSearch.xml
  12. 8 0
      FGUIProject/assets/Friend/components/BtnTab.xml
  13. 0 19
      FGUIProject/assets/Friend/components/Button1.xml
  14. 7 0
      FGUIProject/assets/Friend/components/CompHead.xml
  15. 8 0
      FGUIProject/assets/Friend/components/CompHeadWithBg.xml
  16. 19 0
      FGUIProject/assets/Friend/components/ListApplyItem.xml
  17. 27 0
      FGUIProject/assets/Friend/components/ListItem.xml
  18. 25 0
      FGUIProject/assets/Friend/components/ListSearchItem.xml
  19. 二進制
      FGUIProject/assets/Friend/images/dz_hz_rwdh_1.png
  20. 二進制
      FGUIProject/assets/Friend/images/gg_gg_dtpian.png
  21. 二進制
      FGUIProject/assets/Friend/images/hy_cwcrcw.png
  22. 二進制
      FGUIProject/assets/Friend/images/hy_dikuang_2.png
  23. 二進制
      FGUIProject/assets/Friend/images/hy_dikuang_3.png
  24. 二進制
      FGUIProject/assets/Friend/images/hy_dikuang_4.png
  25. 二進制
      FGUIProject/assets/Friend/images/hy_icon_1.png
  26. 二進制
      FGUIProject/assets/Friend/images/hy_icon_2.png
  27. 二進制
      FGUIProject/assets/Friend/images/hy_icon_3.png
  28. 二進制
      FGUIProject/assets/Friend/images/hy_icon_4.png
  29. 二進制
      FGUIProject/assets/Friend/images/hy_scsc_1.png
  30. 二進制
      FGUIProject/assets/Friend/images/hy_scsc_2.png
  31. 二進制
      FGUIProject/assets/Friend/images/hy_scscs.png
  32. 二進制
      FGUIProject/assets/Friend/images/hy_tjhy_dk.png
  33. 二進制
      FGUIProject/assets/Friend/images/hy_tjhy_ssk.png
  34. 二進制
      FGUIProject/assets/Friend/images/hy_tjtjhy_1.png
  35. 二進制
      FGUIProject/assets/Friend/images/hy_tjtjhy_2.png
  36. 二進制
      FGUIProject/assets/Friend/images/hy_tjtjhy_3.png
  37. 二進制
      FGUIProject/assets/Friend/images/hy_ysqysq.png
  38. 二進制
      FGUIProject/assets/Friend/images/hy_ztzt_1.png
  39. 二進制
      FGUIProject/assets/Friend/images/hy_ztzt_2.png
  40. 二進制
      FGUIProject/assets/Friend/images/hyhy_anniu_1.png
  41. 二進制
      FGUIProject/assets/Friend/images/hyhy_anniu_2.png
  42. 二進制
      FGUIProject/assets/Friend/images/hyhy_anniu_3.png
  43. 二進制
      FGUIProject/assets/Friend/images/hyhy_anniu_4.png
  44. 二進制
      FGUIProject/assets/Friend/images/hyhy_hyp.png
  45. 二進制
      FGUIProject/assets/Friend/images/hyhy_ssanniu_1.png
  46. 二進制
      FGUIProject/assets/Friend/images/hyhy_tjtja.png
  47. 二進制
      FGUIProject/assets/Friend/images/line.png
  48. 二進制
      FGUIProject/assets/Friend/images/self.png
  49. 二進制
      FGUIProject/assets/Friend/images/zjm_dj_1.png
  50. 二進制
      FGUIProject/assets/Friend/images/zjm_txkuang.png
  51. 二進制
      FGUIProject/assets/Friend/images/zjm_txkuang_1.png
  52. 44 1
      FGUIProject/assets/Friend/package.xml
  53. 17 12
      FGUIProject/assets/Main/RoleInfoUI.xml
  54. 1 1
      FGUIProject/assets/Main/package.xml
  55. 4 0
      GameClient/Assets/Game/HotUpdate/Constant/ConstMessage.cs
  56. 4 1
      GameClient/Assets/Game/HotUpdate/Controller/GameController.cs
  57. 5 5
      GameClient/Assets/Game/HotUpdate/Controller/LogController.cs
  58. 10 11
      GameClient/Assets/Game/HotUpdate/Data/CustomSuitDataManager.cs
  59. 176 0
      GameClient/Assets/Game/HotUpdate/Data/FriendDataManager.cs
  60. 1 1
      GameClient/Assets/Game/HotUpdate/Data/LuckyBoxDataManager.cs
  61. 35 0
      GameClient/Assets/Game/HotUpdate/Data/RedDotDataManager.cs
  62. 1 0
      GameClient/Assets/Game/HotUpdate/Data/RoleDataManager.cs
  63. 2 2
      GameClient/Assets/Game/HotUpdate/Data/VO/CustomSuitData.cs
  64. 10 0
      GameClient/Assets/Game/HotUpdate/Data/VO/FriendInfoData.cs
  65. 1 1
      GameClient/Assets/Game/HotUpdate/Data/VO/FriendInfoData.cs.meta
  66. 17 0
      GameClient/Assets/Game/HotUpdate/Data/VO/RoleInfoData.cs
  67. 11 0
      GameClient/Assets/Game/HotUpdate/Data/VO/RoleInfoData.cs.meta
  68. 21 7
      GameClient/Assets/Game/HotUpdate/DressUp/DressUpObjDataCache.cs
  69. 1 1
      GameClient/Assets/Game/HotUpdate/ETCodes/Hotfix/App/Account/A2C_DisconnectHandler.cs
  70. 71 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_CompHead.cs
  71. 11 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_CompHead.cs.meta
  72. 113 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_FriendAddUI.cs
  73. 11 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_FriendAddUI.cs.meta
  74. 30 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_FriendUI.cs
  75. 80 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListApplyItem.cs
  76. 11 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListApplyItem.cs.meta
  77. 86 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListItem.cs
  78. 11 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListItem.cs.meta
  79. 86 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListSearchItem.cs
  80. 11 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListSearchItem.cs.meta
  81. 6 3
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Main/UI_RoleInfoUI.cs
  82. 410 5
      GameClient/Assets/Game/HotUpdate/ServerProxy/FriendSProxy.cs
  83. 1 0
      GameClient/Assets/Game/HotUpdate/ServerProxy/ItemProxy.cs
  84. 41 0
      GameClient/Assets/Game/HotUpdate/ServerProxy/RoleInfoSProxy.cs
  85. 11 0
      GameClient/Assets/Game/HotUpdate/ServerProxy/RoleInfoSProxy.cs.meta
  86. 1 1
      GameClient/Assets/Game/HotUpdate/Views/ClothingDecompose/ClothingDecomposeView.cs
  87. 1 1
      GameClient/Assets/Game/HotUpdate/Views/Common/Alert/AlertUI.cs
  88. 11 0
      GameClient/Assets/Game/HotUpdate/Views/Common/Alert/AlertUI.cs.meta
  89. 1 1
      GameClient/Assets/Game/HotUpdate/Views/Common/Alert/AlertWindow.cs
  90. 1 1
      GameClient/Assets/Game/HotUpdate/Views/CommonGame/BuyConfirmView.cs
  91. 4 4
      GameClient/Assets/Game/HotUpdate/Views/DressUp/DressUpFightView.cs
  92. 56 6
      GameClient/Assets/Game/HotUpdate/Views/DressUp/DressUpView.cs
  93. 1 1
      GameClient/Assets/Game/HotUpdate/Views/Field/FieldFightInfoView.cs
  94. 1 1
      GameClient/Assets/Game/HotUpdate/Views/Field/FieldView.cs
  95. 240 0
      GameClient/Assets/Game/HotUpdate/Views/Friend/FriendAddView.cs
  96. 11 0
      GameClient/Assets/Game/HotUpdate/Views/Friend/FriendAddView.cs.meta
  97. 217 2
      GameClient/Assets/Game/HotUpdate/Views/Friend/FriendView.cs
  98. 1 1
      GameClient/Assets/Game/HotUpdate/Views/Mail/MailView.cs
  99. 3 2
      GameClient/Assets/Game/HotUpdate/Views/MainUI/MainUIView.cs
  100. 7 1
      GameClient/Assets/Game/HotUpdate/Views/MainUI/RoleInfoView.cs

+ 0 - 0
FGUIProject/assets/DressUp/images/hz_xzkuang.png → FGUIProject/assets/CommonGame/imagesExport/hz_xzkuang.png


+ 1 - 0
FGUIProject/assets/CommonGame/package.xml

@@ -191,6 +191,7 @@
     <component id="pjip15" name="SuitPartsDetailUI.xml" path="/" exported="true"/>
     <image id="gd29ti0" name="jingzhongh_bg.jpg" path="/bgimg/"/>
     <font id="rkrwti1" name="SHUANGYUJUTI.TTF" path="/" exported="true" renderMode="" samplePointSize="16"/>
+    <image id="q08xs" name="hz_xzkuang.png" path="/imagesExport/" exported="true"/>
   </resources>
   <publish name="" path="..\GameClient\Assets\ResIn\UI\CommonGame" packageCount="2" genCode="true" extractAlpha="true"/>
 </packageDescription>

+ 1 - 1
FGUIProject/assets/DressUp/components/ComboBoxSuit.xml

@@ -2,7 +2,7 @@
 <component size="416,66" extention="ComboBox">
   <controller name="button" pages="0,up,1,down,2,over,3,selectedOver" selected="0"/>
   <displayList>
-    <image id="n0_q08x" name="n0" src="q08xs" fileName="images/hz_xzkuang.png" xy="2,2">
+    <image id="n0_q08x" name="n0" src="q08xs" fileName="images/hz_xzkuang.png" xy="2,2" pkg="eg2y0ldp">
       <relation target="" sidePair="width-width,height-height"/>
     </image>
     <text id="n1_q08x" name="title" xy="24,0" pivot="0.5,0" size="396,66" fontSize="34" color="#fff0db" align="center" vAlign="middle" autoSize="none" singleLine="true" text="">

+ 0 - 1
FGUIProject/assets/DressUp/package.xml

@@ -25,7 +25,6 @@
     <image id="q08xn" name="hz_shanchu.png" path="/images/"/>
     <image id="q08xo" name="hz_ssuo.png" path="/images/"/>
     <image id="q08xr" name="hz_xialakuang.png" path="/images/"/>
-    <image id="q08xs" name="hz_xzkuang.png" path="/images/"/>
     <component id="q08x13" name="ComboBoxSuit_item.xml" path="/components/"/>
     <component id="q08x14" name="ComboBoxSuit_popup.xml" path="/components/"/>
     <component id="q08x15" name="ComboBoxSuit.xml" path="/components/"/>

+ 56 - 1
FGUIProject/assets/Friend/FriendAddUI.xml

@@ -1,2 +1,57 @@
 <?xml version="1.0" encoding="utf-8"?>
-<component size="1080,1920"/>
+<component size="1062,1300">
+  <controller name="c1" pages="0,,1," selected="0"/>
+  <displayList>
+    <image id="n0_pdeo" name="n0" src="pdeoa" fileName="images/gg_gg_dtpian.png" xy="0,-72"/>
+    <image id="n26_z73e" name="n26" src="kztethr" fileName="imagesExport/hyhy_btbt_1.png" pkg="eg2y0ldp" xy="293,45" group="n28_z73e"/>
+    <text id="n27_z73e" name="txtName" xy="417,45" pivot="0.5,0" size="228,74" group="n28_z73e" fontSize="56" color="#8f6e30" text="添加好友"/>
+    <group id="n28_z73e" name="n28" xy="293,45" size="475,85"/>
+    <component id="n1_pdeo" name="btnTabSearch" src="pdeob" fileName="components/BtnTab.xml" xy="154,1192">
+      <Button checked="true" icon="ui://wez2ujnnz73e18" selectedIcon="ui://wez2ujnnz73e10" controller="c1" page="0"/>
+    </component>
+    <component id="n2_pdeo" name="btnTabApply" src="pdeob" fileName="components/BtnTab.xml" xy="548,1192">
+      <Button icon="ui://wez2ujnnz73e11" selectedIcon="ui://wez2ujnnz73e19" controller="c1" page="1"/>
+    </component>
+    <image id="n29_z73e" name="n29" src="z73ey" fileName="images/hy_tjhy_ssk.png" xy="101,176" group="n34_z73e"/>
+    <text id="n5_pdeo" name="txtSearch" xy="126,182" size="478,65" group="n34_z73e" fontSize="44" color="#948364" ubb="true" autoSize="none" autoClearText="true" text="" input="true" prompt="[color=#BCB196]输入玩家名称[/color]"/>
+    <component id="n31_z73e" name="btnClear" src="z73e1a" fileName="components/BtnClear.xml" xy="620,182" group="n34_z73e"/>
+    <component id="n6_pdeo" name="btnSearch" src="pdeog" fileName="components/BtnSearch.xml" xy="697,170" group="n34_z73e">
+      <Button icon="ui://wez2ujnnz73e13"/>
+    </component>
+    <group id="n34_z73e" name="n34" xy="101,170" size="873,90" group="n17_pdeo"/>
+    <text id="n32_z73e" name="txtTips" xy="102,289" size="196,64" group="n33_z73e" fontSize="48" color="#998262" text="搜索结果"/>
+    <image id="n30_z73e" name="n30" src="z73ev" fileName="images/line.png" xy="318,324" group="n33_z73e"/>
+    <component id="n7_pdeo" name="btnRefresh" src="pdeoh" fileName="components/BtnRefresh.xml" xy="859,280" group="n33_z73e">
+      <Button icon="ui://wez2ujnnz73e12"/>
+    </component>
+    <group id="n33_z73e" name="n33" xy="102,280" size="845,88" group="n17_pdeo"/>
+    <list id="n16_pdeo" name="listSearch" xy="78,389" size="905,702" group="n17_pdeo" overflow="scroll" lineGap="24" defaultItem="ui://wez2ujnnpdeoi" autoClearItems="true">
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+    </list>
+    <group id="n17_pdeo" name="grpSearch" xy="78,170" size="905,921" advanced="true">
+      <gearDisplay controller="c1" pages="0"/>
+    </group>
+    <list id="n22_pdeo" name="listApply" xy="76,177" size="910,790" group="n25_pdeo" overflow="scroll" lineGap="24" defaultItem="ui://wez2ujnnpdeoj" autoClearItems="true">
+      <gearDisplay controller="c1" pages="1"/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+    </list>
+    <component id="n23_pdeo" name="btnRefuseAll" src="ih7595" fileName="components/Button11.xml" pkg="mk0fwx0x" xy="116,1017" size="380,113" group="n25_pdeo">
+      <Button title="一键拒绝"/>
+    </component>
+    <component id="n24_pdeo" name="btnAgreeAll" src="ih7594" fileName="components/Button10.xml" pkg="mk0fwx0x" xy="558,1017" size="380,113" group="n25_pdeo">
+      <Button title="一键接受"/>
+    </component>
+    <group id="n25_pdeo" name="grpApply" xy="76,177" size="910,953" advanced="true">
+      <gearDisplay controller="c1" pages="1"/>
+    </group>
+  </displayList>
+</component>

+ 40 - 1
FGUIProject/assets/Friend/FriendUI.xml

@@ -1,7 +1,46 @@
 <?xml version="1.0" encoding="utf-8"?>
 <component size="1080,1920">
   <displayList>
+    <loader id="n21_nb1u" name="loaBg" xy="540,960" pivot="0.5,0.5" anchor="true" size="1080,2400" fill="scaleMatchWidth">
+      <relation target="" sidePair="width-width,height-height,center-center,middle-middle"/>
+    </loader>
     <component id="n0_jdju" name="btnBack" src="9xlo8" fileName="components/ButtonBack1.xml" pkg="eg2y0ldp" xy="35,80"/>
-    <component id="n1_jdju" name="btnAdd" src="jdju1" fileName="components/Button1.xml" xy="120,1686"/>
+    <image id="n8_z73e" name="n8" src="z73el" fileName="images/hy_dikuang_2.png" xy="705,101" group="n9_z73e"/>
+    <text id="n2_pdeo" name="txtCount" xy="734,100" pivot="0.5,0" size="259,49" group="n9_z73e" fontSize="36" color="#e4dbcf" align="center" text="好友数:10/50"/>
+    <group id="n9_z73e" name="grpCount" xy="705,100" size="317,51"/>
+    <image id="n17_z73e" name="n17" src="q08xs" fileName="imagesExport/hz_xzkuang.png" pkg="eg2y0ldp" xy="200,93" group="n13_z73e"/>
+    <text id="n12_z73e" name="txtName" xy="370,98" pivot="0.5,0" size="71,46" group="n13_z73e" fontSize="34" color="#fff0db" text="套装"/>
+    <group id="n13_z73e" name="grpName" xy="200,93" size="412,62" advanced="true"/>
+    <image id="n18_z73e" name="n18" src="z73e1c" fileName="images/dz_hz_rwdh_1.png" xy="89,1243" size="409,153" group="n20_z73e">
+      <relation target="" sidePair="bottom-bottom"/>
+    </image>
+    <text id="n19_z73e" name="txtSlogan" xy="105,1247" size="378,116" group="n20_z73e" fontSize="28" color="#997350" ubb="true" autoSize="none" autoClearText="true" text="采菊东篱下,悠然见南山。山气日夕佳,飞鸟相与还。此中有真意,欲辨已忘言。">
+      <relation target="" sidePair="bottom-bottom"/>
+    </text>
+    <group id="n20_z73e" name="grpSlogan" xy="89,1243" size="409,153" advanced="true"/>
+    <component id="n15_z73e" name="btnSolgan" src="jdju1" fileName="components/BtnModel1.xml" xy="40,1393" group="n16_z73e">
+      <Button icon="ui://wez2ujnnz73et"/>
+    </component>
+    <component id="n14_z73e" name="btnDelete" src="jdju1" fileName="components/BtnModel1.xml" xy="40,1530" group="n16_z73e">
+      <Button icon="ui://wez2ujnnz73es"/>
+    </component>
+    <component id="n1_jdju" name="btnAdd" src="jdju1" fileName="components/BtnModel1.xml" xy="40,1667" group="n16_z73e"/>
+    <group id="n16_z73e" name="n16" xy="40,1393" size="112,394" advanced="true" layout="vt" lineGap="17" excludeInvisibles="true">
+      <relation target="" sidePair="left-left,bottom-bottom"/>
+    </group>
+    <list id="n7_pdeo" name="list" xy="652,220" size="428,1460" overflow="scroll" defaultItem="ui://wez2ujnnpdeo9" autoClearItems="true">
+      <relation target="" sidePair="right-right,top-top,bottomext-bottom"/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+      <item/>
+    </list>
+    <component id="n11_z73e" name="btnSendAll" src="ih7594" fileName="components/Button10.xml" pkg="mk0fwx0x" xy="672,1750">
+      <relation target="" sidePair="right-right,bottom-bottom"/>
+      <Button title="一键领取"/>
+    </component>
   </displayList>
 </component>

+ 10 - 0
FGUIProject/assets/Friend/components/BtnClear.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="62,60" extention="Button">
+  <controller name="button" pages="0,up,1,down,2,over,3,selectedOver" selected="0"/>
+  <displayList>
+    <image id="n0_z73e" name="n0" src="z73ew" fileName="images/hy_scscs.png" xy="0,0">
+      <relation target="" sidePair="width-width,height-height"/>
+    </image>
+  </displayList>
+  <Button/>
+</component>

+ 8 - 0
FGUIProject/assets/Friend/components/BtnModel.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="60,60" extention="Button">
+  <controller name="button" pages="0,up,1,down,2,over,3,selectedOver" selected="0"/>
+  <displayList>
+    <loader id="n3_z73e" name="icon" xy="0,0" size="60,60" url="ui://wez2ujnnz73en"/>
+  </displayList>
+  <Button/>
+</component>

+ 8 - 0
FGUIProject/assets/Friend/components/BtnModel1.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="112,120" extention="Button">
+  <controller name="button" pages="0,up,1,down,2,over,3,selectedOver" selected="0"/>
+  <displayList>
+    <loader id="n3_z73e" name="icon" xy="0,0" size="112,121" url="ui://wez2ujnnz73er" autoSize="true"/>
+  </displayList>
+  <Button/>
+</component>

+ 8 - 0
FGUIProject/assets/Friend/components/BtnRefresh.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="88,88" extention="Button">
+  <controller name="button" pages="0,up,1,down" selected="0"/>
+  <displayList>
+    <loader id="n2_kjq3" name="icon" xy="0,0" size="50,50" autoSize="true"/>
+  </displayList>
+  <Button mode="Radio"/>
+</component>

+ 8 - 0
FGUIProject/assets/Friend/components/BtnSearch.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="277,90" extention="Button">
+  <controller name="button" pages="0,up,1,down" selected="0"/>
+  <displayList>
+    <loader id="n2_kjq3" name="icon" xy="0,0" size="50,50" autoSize="true"/>
+  </displayList>
+  <Button mode="Radio"/>
+</component>

+ 8 - 0
FGUIProject/assets/Friend/components/BtnTab.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="341,108" extention="Button">
+  <controller name="button" pages="0,up,1,down" selected="1"/>
+  <displayList>
+    <loader id="n2_kjq3" name="icon" xy="0,0" size="50,50" autoSize="true"/>
+  </displayList>
+  <Button mode="Radio"/>
+</component>

+ 0 - 19
FGUIProject/assets/Friend/components/Button1.xml

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<component size="100,100" extention="Button">
-  <controller name="button" pages="0,up,1,down,2,over,3,selectedOver" selected="0"/>
-  <displayList>
-    <graph id="n0_jdju" name="n0" xy="0,0" size="100,100" touchable="false" type="rect" lineSize="0" fillColor="#fff0f0f0">
-      <gearDisplay controller="button" pages="0"/>
-      <relation target="" sidePair="width-width,height-height"/>
-    </graph>
-    <graph id="n1_jdju" name="n1" xy="0,0" size="100,100" touchable="false" type="rect" lineSize="0" fillColor="#fffafafa">
-      <gearDisplay controller="button" pages="2"/>
-      <relation target="" sidePair="width-width,height-height"/>
-    </graph>
-    <graph id="n2_jdju" name="n2" xy="0,0" size="100,100" touchable="false" type="rect" lineSize="0" fillColor="#ffcccccc">
-      <gearDisplay controller="button" pages="1,3"/>
-      <relation target="" sidePair="width-width,height-height"/>
-    </graph>
-  </displayList>
-  <Button/>
-</component>

+ 7 - 0
FGUIProject/assets/Friend/components/CompHead.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="124,124" pivot="0.5,0.5" mask="n40_kubi">
+  <displayList>
+    <loader id="n39_kubi" name="icon" xy="0,0" size="124,124" url="ui://wez2ujnnpdeo6" fill="scaleFree"/>
+    <image id="n40_kubi" name="n40" src="pdeo4" fileName="images/zjm_txkuang.png" xy="0,0" size="124,124"/>
+  </displayList>
+</component>

+ 8 - 0
FGUIProject/assets/Friend/components/CompHeadWithBg.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="124,124">
+  <displayList>
+    <image id="n2_q08x" name="n2" src="pdeo4" fileName="images/zjm_txkuang.png" xy="0,0" size="124,124"/>
+    <component id="n39_kubi" name="n39" src="pdeo5" fileName="components/CompHead.xml" xy="0,0" size="124,124" scale="0.9,0.9"/>
+    <image id="n40_wg7t" name="n40" src="pdeo7" fileName="images/zjm_txkuang_1.png" xy="0,0" size="124,124"/>
+  </displayList>
+</component>

+ 19 - 0
FGUIProject/assets/Friend/components/ListApplyItem.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="905,147">
+  <displayList>
+    <image id="n22_z73e" name="n22" src="z73ex" fileName="images/hy_tjhy_dk.png" xy="0,0"/>
+    <text id="n19_pdeo" name="txtName" xy="185,44" size="312,59" fontSize="44" color="#bb996c" text="角色名字七个字"/>
+    <component id="n20_pdeo" name="btnAgree" src="jdju1" fileName="components/BtnModel1.xml" xy="770,28" size="94,91">
+      <Button icon="ui://wez2ujnnz73e14"/>
+    </component>
+    <component id="n21_pdeo" name="btnRefuse" src="jdju1" fileName="components/BtnModel1.xml" xy="656,28" size="94,91">
+      <Button icon="ui://wez2ujnnz73e15"/>
+    </component>
+    <component id="n23_z73e" name="n23" src="pdeo3" fileName="components/CompHeadWithBg.xml" xy="40,12" pivot="0.5,0.5" size="124,124"/>
+    <image id="n24_z73e" name="n24" src="z73e17" fileName="images/zjm_dj_1.png" xy="127,91" group="n26_z73e"/>
+    <text id="n25_z73e" name="txtLvl" xy="134,97" size="29,29" group="n26_z73e" fontSize="20" color="#ffffff" align="center" text="99">
+      <relation target="n24_z73e" sidePair="center-center,middle-middle"/>
+    </text>
+    <group id="n26_z73e" name="n26" xy="127,91" size="42,43"/>
+  </displayList>
+</component>

+ 27 - 0
FGUIProject/assets/Friend/components/ListItem.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="440,184" extention="Button">
+  <controller name="c1" pages="0,可领,1,可送,2,已送,3,已领" selected="0"/>
+  <controller name="c2" pages="0,在线,1,离线" selected="0"/>
+  <controller name="button" pages="0,up,1,down" selected="1"/>
+  <displayList>
+    <image id="n14_z73e" name="n14" src="z73em" fileName="images/hy_dikuang_3.png" xy="12,17"/>
+    <image id="n16_gmjo" name="n16" src="gmjo1d" fileName="images/hy_dikuang_4.png" xy="0,0">
+      <gearDisplay controller="button" pages="1"/>
+    </image>
+    <component id="n3_pdeo" name="n3" src="pdeo3" fileName="components/CompHeadWithBg.xml" xy="39,30" pivot="0.5,0.5" size="124,124"/>
+    <image id="n11_z73e" name="n11" src="z73e17" fileName="images/zjm_dj_1.png" xy="128,110" group="n13_z73e"/>
+    <text id="n12_z73e" name="txtLvl" xy="135,116" size="29,29" group="n13_z73e" fontSize="20" color="#ffffff" align="center" text="99">
+      <relation target="n11_z73e" sidePair="center-center,middle-middle"/>
+    </text>
+    <group id="n13_z73e" name="n13" xy="128,110" size="42,43"/>
+    <text id="n4_pdeo" name="txtName" xy="177,32" size="230,51" fontSize="38" color="#927a58" text="角色名七个字"/>
+    <component id="n9_pdeo" name="btnSend" src="pdeo8" fileName="components/BtnModel.xml" xy="342,93">
+      <gearIcon controller="c1" pages="0,2,3" values="ui://wez2ujnnz73ep|ui://wez2ujnnz73eo|ui://wez2ujnnz73eq" default="ui://wez2ujnnz73en"/>
+      <Button icon="ui://wez2ujnnz73ep"/>
+    </component>
+    <loader id="n15_z73e" name="loaState" xy="181,112" size="100,28" url="ui://wez2ujnnz73eu" autoSize="true">
+      <gearIcon controller="c2" pages="1" values="ui://wez2ujnnz73ek" default="ui://wez2ujnnz73eu"/>
+    </loader>
+  </displayList>
+  <Button mode="Radio"/>
+</component>

+ 25 - 0
FGUIProject/assets/Friend/components/ListSearchItem.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<component size="905,147">
+  <controller name="c1" pages="0,,1," selected="1"/>
+  <controller name="c2" pages="0,,1," selected="0"/>
+  <displayList>
+    <image id="n16_z73e" name="n16" src="z73ex" fileName="images/hy_tjhy_dk.png" xy="0,0"/>
+    <component id="n17_z73e" name="n17" src="pdeo3" fileName="components/CompHeadWithBg.xml" xy="40,11" pivot="0.5,0.5" size="124,124"/>
+    <image id="n18_z73e" name="n18" src="z73e17" fileName="images/zjm_dj_1.png" xy="127,90" group="n20_z73e"/>
+    <text id="n19_z73e" name="txtLvl" xy="134,96" size="29,29" group="n20_z73e" fontSize="20" color="#ffffff" align="center" text="99">
+      <relation target="n18_z73e" sidePair="center-center,middle-middle"/>
+    </text>
+    <group id="n20_z73e" name="n20" xy="127,90" size="42,43"/>
+    <text id="n9_pdeo" name="txtName" xy="174,10" size="295,56" fontSize="42" color="#bb996c" text="角色名字七个字"/>
+    <component id="n13_pdeo" name="btnAdd" src="jdju1" fileName="components/BtnModel1.xml" xy="738,26" size="94,94">
+      <gearDisplay controller="c1" pages="0"/>
+      <Button icon="ui://wez2ujnnz73e1b"/>
+    </component>
+    <image id="n21_z73e" name="n21" src="z73ez" fileName="images/hy_ysqysq.png" xy="696,40">
+      <gearDisplay controller="c1" pages="1"/>
+    </image>
+    <loader id="n22_nfg4" name="loaState" xy="180,99" size="100,28" url="ui://wez2ujnnz73eu" autoSize="true">
+      <gearIcon controller="c2" pages="1" values="ui://wez2ujnnz73ek" default="ui://wez2ujnnz73eu"/>
+    </loader>
+  </displayList>
+</component>

二進制
FGUIProject/assets/Friend/images/dz_hz_rwdh_1.png


二進制
FGUIProject/assets/Friend/images/gg_gg_dtpian.png


二進制
FGUIProject/assets/Friend/images/hy_cwcrcw.png


二進制
FGUIProject/assets/Friend/images/hy_dikuang_2.png


二進制
FGUIProject/assets/Friend/images/hy_dikuang_3.png


二進制
FGUIProject/assets/Friend/images/hy_dikuang_4.png


二進制
FGUIProject/assets/Friend/images/hy_icon_1.png


二進制
FGUIProject/assets/Friend/images/hy_icon_2.png


二進制
FGUIProject/assets/Friend/images/hy_icon_3.png


二進制
FGUIProject/assets/Friend/images/hy_icon_4.png


二進制
FGUIProject/assets/Friend/images/hy_scsc_1.png


二進制
FGUIProject/assets/Friend/images/hy_scsc_2.png


二進制
FGUIProject/assets/Friend/images/hy_scscs.png


二進制
FGUIProject/assets/Friend/images/hy_tjhy_dk.png


二進制
FGUIProject/assets/Friend/images/hy_tjhy_ssk.png


二進制
FGUIProject/assets/Friend/images/hy_tjtjhy_1.png


二進制
FGUIProject/assets/Friend/images/hy_tjtjhy_2.png


二進制
FGUIProject/assets/Friend/images/hy_tjtjhy_3.png


二進制
FGUIProject/assets/Friend/images/hy_ysqysq.png


二進制
FGUIProject/assets/Friend/images/hy_ztzt_1.png


二進制
FGUIProject/assets/Friend/images/hy_ztzt_2.png


二進制
FGUIProject/assets/Friend/images/hyhy_anniu_1.png


二進制
FGUIProject/assets/Friend/images/hyhy_anniu_2.png


二進制
FGUIProject/assets/Friend/images/hyhy_anniu_3.png


二進制
FGUIProject/assets/Friend/images/hyhy_anniu_4.png


二進制
FGUIProject/assets/Friend/images/hyhy_hyp.png


二進制
FGUIProject/assets/Friend/images/hyhy_ssanniu_1.png


二進制
FGUIProject/assets/Friend/images/hyhy_tjtja.png


二進制
FGUIProject/assets/Friend/images/line.png


二進制
FGUIProject/assets/Friend/images/self.png


二進制
FGUIProject/assets/Friend/images/zjm_dj_1.png


二進制
FGUIProject/assets/Friend/images/zjm_txkuang.png


二進制
FGUIProject/assets/Friend/images/zjm_txkuang_1.png


+ 44 - 1
FGUIProject/assets/Friend/package.xml

@@ -2,8 +2,51 @@
 <packageDescription id="wez2ujnn">
   <resources>
     <component id="jdju0" name="FriendUI.xml" path="/" exported="true"/>
-    <component id="jdju1" name="Button1.xml" path="/components/"/>
+    <component id="jdju1" name="BtnModel1.xml" path="/components/"/>
     <component id="jdju2" name="FriendAddUI.xml" path="/" exported="true"/>
+    <component id="pdeo3" name="CompHeadWithBg.xml" path="/components/"/>
+    <image id="pdeo4" name="zjm_txkuang.png" path="/images/"/>
+    <component id="pdeo5" name="CompHead.xml" path="/components/"/>
+    <image id="pdeo6" name="self.png" path="/images/"/>
+    <image id="pdeo7" name="zjm_txkuang_1.png" path="/images/" scale="9grid" scale9grid="31,31,62,62"/>
+    <component id="pdeo8" name="BtnModel.xml" path="/components/"/>
+    <component id="pdeo9" name="ListItem.xml" path="/components/"/>
+    <image id="pdeoa" name="gg_gg_dtpian.png" path="/images/"/>
+    <component id="pdeob" name="BtnTab.xml" path="/components/"/>
+    <component id="pdeog" name="BtnSearch.xml" path="/components/"/>
+    <component id="pdeoh" name="BtnRefresh.xml" path="/components/"/>
+    <component id="pdeoi" name="ListSearchItem.xml" path="/components/"/>
+    <component id="pdeoj" name="ListApplyItem.xml" path="/components/"/>
+    <image id="z73ek" name="hy_ztzt_2.png" path="/images/"/>
+    <image id="z73el" name="hy_dikuang_2.png" path="/images/"/>
+    <image id="z73em" name="hy_dikuang_3.png" path="/images/"/>
+    <image id="z73en" name="hy_icon_1.png" path="/images/"/>
+    <image id="z73eo" name="hy_icon_2.png" path="/images/"/>
+    <image id="z73ep" name="hy_icon_3.png" path="/images/"/>
+    <image id="z73eq" name="hy_icon_4.png" path="/images/"/>
+    <image id="z73er" name="hy_tjtjhy_1.png" path="/images/"/>
+    <image id="z73es" name="hy_tjtjhy_2.png" path="/images/"/>
+    <image id="z73et" name="hy_tjtjhy_3.png" path="/images/"/>
+    <image id="z73eu" name="hy_ztzt_1.png" path="/images/"/>
+    <image id="z73ev" name="line.png" path="/images/"/>
+    <image id="z73ew" name="hy_scscs.png" path="/images/"/>
+    <image id="z73ex" name="hy_tjhy_dk.png" path="/images/"/>
+    <image id="z73ey" name="hy_tjhy_ssk.png" path="/images/"/>
+    <image id="z73ez" name="hy_ysqysq.png" path="/images/"/>
+    <image id="z73e10" name="hyhy_anniu_1.png" path="/images/"/>
+    <image id="z73e11" name="hyhy_anniu_2.png" path="/images/"/>
+    <image id="z73e12" name="hyhy_hyp.png" path="/images/"/>
+    <image id="z73e13" name="hyhy_ssanniu_1.png" path="/images/"/>
+    <image id="z73e14" name="hy_scsc_2.png" path="/images/"/>
+    <image id="z73e15" name="hy_scsc_1.png" path="/images/"/>
+    <image id="z73e16" name="hy_cwcrcw.png" path="/images/"/>
+    <image id="z73e17" name="zjm_dj_1.png" path="/images/"/>
+    <image id="z73e18" name="hyhy_anniu_4.png" path="/images/"/>
+    <image id="z73e19" name="hyhy_anniu_3.png" path="/images/"/>
+    <component id="z73e1a" name="BtnClear.xml" path="/components/"/>
+    <image id="z73e1b" name="hyhy_tjtja.png" path="/images/"/>
+    <image id="z73e1c" name="dz_hz_rwdh_1.png" path="/images/"/>
+    <image id="gmjo1d" name="hy_dikuang_4.png" path="/images/"/>
   </resources>
   <publish name="" path="..\GameClient\Assets\ResIn\UI\Friend" packageCount="2" genCode="true"/>
 </packageDescription>

+ 17 - 12
FGUIProject/assets/Main/RoleInfoUI.xml

@@ -2,20 +2,25 @@
 <component size="700,1000">
   <displayList>
     <loader id="n0_d4iw" name="bg" xy="-73,0" size="877,1000" touchable="false" url="ui://mfvz4q8kmhyhd5"/>
-    <image id="n23_mhyh" name="n23" src="mhyhd7" fileName="images/grxx_mzk_1.png" xy="214,313"/>
     <text id="n2_d4iw" name="txtTitle" xy="-13,22" size="726,56" visible="false" fontSize="42" color="#ffffff" align="center" autoSize="none" text="个人信息"/>
-    <component id="n4_d4iw" name="n4" src="kubi7h" fileName="components/CompHeadWithBg.xml" xy="288,127" pivot="0.5,0.5" scale="1.6,1.6"/>
-    <text id="n5_d4iw" name="txtRoleName" xy="273,313" pivot="0.5,0" size="186,61" fontSize="46" color="#a37349" align="center" text="角色名五"/>
-    <text id="n6_d4iw" name="n6" xy="57,440" size="71,46" fontSize="34" color="#aa794d" text="等级"/>
-    <text id="n7_d4iw" name="n7" xy="57,500" size="71,46" fontSize="34" color="#aa794d" text="经验"/>
-    <text id="n10_d4iw" name="n10" xy="57,560" size="71,46" fontSize="34" color="#aa794d" text="音效"/>
-    <text id="n12_d4iw" name="n12" xy="447,560" size="71,46" fontSize="34" color="#aa794d" text="音乐"/>
-    <text id="n8_d4iw" name="txtLvl" xy="162,440" size="25,46" fontSize="34" color="#c47a6c" text="1"/>
-    <component id="n9_d4iw" name="proBarExp" src="d4iw6m" fileName="components/ProgressBarExp2.xml" xy="156,508">
+    <component id="n4_d4iw" name="n4" src="kubi7h" fileName="components/CompHeadWithBg.xml" xy="288,110" pivot="0.5,0.5" scale="1.6,1.6"/>
+    <image id="n23_mhyh" name="n23" src="mhyhd7" fileName="images/grxx_mzk_1.png" xy="200,280" pivot="0.5,0" size="303,67">
+      <relation target="n5_d4iw" sidePair="width-width"/>
+    </image>
+    <text id="n5_d4iw" name="txtRoleName" xy="238,280" pivot="0.5,0" size="232,61" fontSize="46" color="#a37349" align="center" text="名称七个字"/>
+    <loader id="n24_mhyh" name="loaChangeName" xy="501,298" size="34,36" url="ui://mfvz4q8kmhyhd8" autoSize="true">
+      <relation target="n23_mhyh" sidePair="left-right"/>
+    </loader>
+    <text id="n6_d4iw" name="n6" xy="57,480" size="71,46" fontSize="34" color="#aa794d" text="等级"/>
+    <text id="n7_d4iw" name="n7" xy="57,540" size="71,46" fontSize="34" color="#aa794d" text="经验"/>
+    <text id="n10_d4iw" name="n10" xy="57,600" size="71,46" fontSize="34" color="#aa794d" text="音效"/>
+    <text id="n12_d4iw" name="n12" xy="447,600" size="71,46" fontSize="34" color="#aa794d" text="音乐"/>
+    <text id="n8_d4iw" name="txtLvl" xy="162,480" size="25,46" fontSize="34" color="#c47a6c" text="1"/>
+    <component id="n9_d4iw" name="proBarExp" src="d4iw6m" fileName="components/ProgressBarExp2.xml" xy="156,548">
       <ProgressBar value="100" max="100"/>
     </component>
-    <component id="n11_d4iw" name="btnSound" src="d4iw6o" fileName="components/ButtonToggle.xml" xy="156,561"/>
-    <component id="n13_d4iw" name="btnMusic" src="d4iw6o" fileName="components/ButtonToggle.xml" xy="536,565"/>
+    <component id="n11_d4iw" name="btnSound" src="d4iw6o" fileName="components/ButtonToggle.xml" xy="156,601"/>
+    <component id="n13_d4iw" name="btnMusic" src="d4iw6o" fileName="components/ButtonToggle.xml" xy="536,605"/>
     <component id="n19_ga16" name="btnLogout" src="axdi97" fileName="components/Button12.xml" pkg="mk0fwx0x" xy="204,786" aspect="true">
       <Button title="注销账户"/>
     </component>
@@ -28,7 +33,7 @@
     <text id="n21_bx8o" name="txtVersion" xy="466,824" size="200,42" fontSize="30" color="#cccccc" align="right" autoSize="none" autoClearText="true" text="v 1.0.0">
       <relation target="" sidePair="left-left,top-top"/>
     </text>
-    <loader id="n24_mhyh" name="loaChangeName" xy="513,331" size="34,36" url="ui://mfvz4q8kmhyhd8" autoSize="true"/>
     <image id="n25_mhyh" name="n25" src="mhyhd6" fileName="images/grxx_txtx.png" xy="247,86" visible="false"/>
+    <text id="n26_pdeo" name="txtSlogan" xy="55,370" size="612,89" fontSize="34" color="#aa794d" autoSize="none" autoClearText="true" text="采菊东篱下,悠然见南山。山气日夕佳,飞鸟相与还。此中有真意,欲辨已忘言。" input="true" prompt="[color=#BDA893]输入个人简介[/color]" maxLength="30"/>
   </displayList>
 </component>

+ 1 - 1
FGUIProject/assets/Main/package.xml

@@ -336,7 +336,7 @@
     <component id="mhyhd4" name="ProgressBar2.xml" path="/components/"/>
     <image id="mhyhd5" name="grxx_dikuang.png" path="/images/"/>
     <image id="mhyhd6" name="grxx_txtx.png" path="/images/"/>
-    <image id="mhyhd7" name="grxx_mzk_1.png" path="/images/"/>
+    <image id="mhyhd7" name="grxx_mzk_1.png" path="/images/" scale="9grid" scale9grid="75,16,150,32"/>
     <image id="mhyhd8" name="grxx_mzk_2.png" path="/images/"/>
     <component id="lki4db" name="ComRoleSkill1.xml" path="/components/"/>
     <component id="txgzdc" name="CompChapter10002.xml" path="/componentsLevel/" exported="true"/>

+ 4 - 0
GameClient/Assets/Game/HotUpdate/Constant/ConstMessage.cs

@@ -71,5 +71,9 @@ namespace GFGGame
         public const string FINSH_GUIDE_INDEX = "FINSH_GUIDE_INDEX";//完成一步引导
         public const string RED_CHANGE = "RED_CHANGE";//红点变化,新增或删除
 
+        public const string FRIEND_REFRESH = "FRIEND_REFRESH";//刷新好友列表
+        public const string FRIEND_ADD = "FRIEND_ADD";//新增好友
+        public const string FRIEND_REMOVE = "FRIEND_REMOVE";//删除好友
+        public const string FRIEND_APPLY_CHANGE = "FRIEND_APPLY_CHANGE";//好友申请列表变化
     }
 }

+ 4 - 1
GameClient/Assets/Game/HotUpdate/Controller/GameController.cs

@@ -118,7 +118,7 @@ namespace GFGGame
 
             if (skipGuide <= 0 && LauncherConfig.netType == EnumNetType.LOCAL)
             {
-                Alert.Show("是否跳过引导?如果您是第一次体验,建议不要跳过引导!")
+                AlertUI.Show("是否跳过引导?如果您是第一次体验,建议不要跳过引导!")
                            .SetLeftButton(true, "不用", (obj) =>
                            {
                                EnterGame();
@@ -161,6 +161,7 @@ namespace GFGGame
             DressUpMenuItemDataManager.Clear();
             GuideDataManager.Clear();
             GetSuitItemController.Clear();
+            FriendDataManager.Instance.Clear();
             GameGlobal.zoneScene.GetComponent<SessionComponent>()?.Disconnect();
             GameGlobal.zoneScene.GetComponent<ServerInfosComponent>()?.ServerInfoList?.Clear();
             GameGlobal.zoneScene.GetComponent<AccountInfoComponent>()?.Clear();
@@ -231,6 +232,8 @@ namespace GFGGame
             StudioSProxy.ReqStudioInfos().Coroutine();
             NoticeSProxy.ReqSystemNoticeList().Coroutine();
             MailSProxy.ReqMailCount().Coroutine();
+            FriendSProxy.ReqAllFriendInfos().Coroutine();
+            RoleInfoSProxy.ReqPersonalInfo().Coroutine();
 
             EquipDataCache.cacher.autoPlay = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_AUTO_PLAY) <= 0 ? false : true;
             EquipDataCache.cacher.fightSpeed = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_AUTO_PLAY_SPEED) <= 1 ? 1 : StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_AUTO_PLAY_SPEED);

+ 5 - 5
GameClient/Assets/Game/HotUpdate/Controller/LogController.cs

@@ -22,10 +22,10 @@ namespace GFGGame
             msgDic.Add(_all, new List<string>());
             msgDic.Add(_error, new List<string>());
             msgDic.Add(_log, new List<string>());
-            if (LauncherConfig.onDebug == 1)
-            {
-                this.CreatBtnLog();
-            }
+            // if (LauncherConfig.onDebug == 1)
+            // {
+            this.CreatBtnLog();
+            // }
 
             this.AddMsgListener();
         }
@@ -64,7 +64,7 @@ namespace GFGGame
                     msgDic[_all].Add(msg);
                     msgDic[_error].Add(msg);
 
-                    if(_btnLog != null)
+                    if (_btnLog != null)
                     {
                         _btnLog.m_c1.selectedIndex = 1;
                         _btnLog.target.alpha = 1;

+ 10 - 11
GameClient/Assets/Game/HotUpdate/Data/CustomSuitDataManager.cs

@@ -6,16 +6,15 @@ namespace GFGGame
 {
     public class CustomSuitDataManager
     {
-        public static int currentIndex
-        {
-            get { return StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_CUSTOME_SUIT_INDEX); }
-        }
+        private static int _currentIndex;
+        public static int currentIndex { get; set; }
+
 
         private static Dictionary<int, CustomSuitData> _dataDic = new Dictionary<int, CustomSuitData>();
         public static void SaveSuit(int index, List<int> arrayList, int bgID = 0, int suitId = 0, bool pic = false)
         {
             CustomSuitData suitSavedData = null;
-            if(_dataDic.ContainsKey(index))
+            if (_dataDic.ContainsKey(index))
             {
                 suitSavedData = _dataDic[index];
             }
@@ -33,7 +32,7 @@ namespace GFGGame
         public static CustomSuitData GetSuitList(int index)
         {
             CustomSuitData suitSavedData = null;
-            if(_dataDic.ContainsKey(index))
+            if (_dataDic.ContainsKey(index))
             {
                 suitSavedData = _dataDic[index];
             }
@@ -48,7 +47,7 @@ namespace GFGGame
         public static CustomSuitData CreateDefaultSuitData(int index)
         {
             CustomSuitData suitSavedData = new CustomSuitData(index);
-            suitSavedData.equipDatas = new List<int>{10000, 30000, 50000};
+            suitSavedData.equipDatas = new List<int> { 10000, 30000, 50000 };
             suitSavedData.bg = 180001;
             suitSavedData.suitId = 0;
             suitSavedData.pic = false;
@@ -62,9 +61,9 @@ namespace GFGGame
 
         public static void SaveCurrentSuit(int index)
         {
-            if(currentIndex != index)
+            if (currentIndex != index)
             {
-                StorageSProxy.ReqSetClientValue(ConstStorageId.STORAGE_CUSTOME_SUIT_INDEX ,index).Coroutine();
+                currentIndex = index;
             }
             CustomSuitSProxy.UpdateCustomSuit(index, EquipDataCache.cacher.equipDatas, EquipDataCache.cacher.bgId, EquipDataCache.cacher.suitId, EquipDataCache.cacher.picStatus).Coroutine();
         }
@@ -72,9 +71,9 @@ namespace GFGGame
         public static void InitServerData(List<CustomSuitProto> list)
         {
             _dataDic.Clear();
-            if(list != null)
+            if (list != null)
             {
-                foreach(var suitProto in list)
+                foreach (var suitProto in list)
                 {
                     CustomSuitData suitSavedData = new CustomSuitData(suitProto.Pos);
                     _dataDic[suitProto.Pos] = suitSavedData;

+ 176 - 0
GameClient/Assets/Game/HotUpdate/Data/FriendDataManager.cs

@@ -1,7 +1,183 @@
+using System.Collections.Generic;
+using System.Linq;
+using ET;
+
 namespace GFGGame
 {
+
     public class FriendDataManager : SingletonBase<FriendDataManager>
     {
+        public void Clear()
+        {
+            _friendDic.Clear();
+            _list.Clear();
+            ClearRecommendDatas();
+            ClearSearchDatas();
+            ClearApplyDatas();
+        }
+        private int _count = 0;
+        public int Count//今日已领体力数
+        {
+            get
+            {
+                return GameGlobal.myNumericComponent.GetAsInt(NumericType.TakeFriendGiftCount); ;
+            }
+        }
+
+        private Dictionary<long, FriendInfoData> _friendDic = new Dictionary<long, FriendInfoData>();//好友列表
+        private List<FriendInfoData> _list = new List<FriendInfoData>();
+        public List<FriendInfoData> FriendDatas
+        {
+            get
+            {
+                return _list;
+            }
+        }
+
+        public void AddFriend(FriendInfoData roleInfo)
+        {
+            _friendDic.Add(roleInfo.roleInfo.roleId, roleInfo);
+            UpdateFriendList(true);
+        }
+        public void RemoveFriend(long roleId)
+        {
+            if (_friendDic.ContainsKey(roleId))
+            {
+                _friendDic.Remove(roleId);
+                UpdateFriendList(true);
+            }
+        }
+        public void ChangeFriendInfo(RoleInfoData roleInfo)
+        {
+            if (_friendDic.ContainsKey(roleInfo.roleId))
+            {
+                _friendDic[roleInfo.roleId].roleInfo = roleInfo;
+                UpdateFriendList(false);
+            }
+        }
+        public void ChangeGiveGiftStates(long roleId, int state)
+        {
+            if (_friendDic.ContainsKey(roleId))
+            {
+                _friendDic[roleId].giveGiftState = state;
+                UpdateFriendList(false);
+            }
+        }
+        public void ChangeTakeGiftStates(long roleId, int state)
+        {
+            if (_friendDic.ContainsKey(roleId))
+            {
+                _friendDic[roleId].takeGiftState = state;
+                UpdateFriendList(false);
+            }
+        }
+        public void ChangeGiveTakeGiftStates(long roleId, int state, int takeState)
+        {
+            if (_friendDic.ContainsKey(roleId))
+            {
+                _friendDic[roleId].giveGiftState = state;
+                _friendDic[roleId].takeGiftState = takeState;
+                UpdateFriendList(false);
+            }
+        }
+        private void UpdateFriendList(bool sort)
+        {
+            _list = _friendDic.Values.ToList<FriendInfoData>();
+            if (!sort) return;
+            _list.Sort((FriendInfoData a, FriendInfoData b) =>
+            {
+                long count = b.roleInfo.offlineTimeSec - a.roleInfo.offlineTimeSec;
+                if (count > 0)
+                {
+                    return -1;
+                }
+                else
+                {
+                    return 1;
+                }
+            });
+        }
+
+
+        private List<RoleInfoData> _recommendDatas = new List<RoleInfoData>();//推荐列表
+        public List<RoleInfoData> RecommendDatas
+        {
+            get
+            {
+                return _recommendDatas;
+            }
+        }
+        public void AddRecommendData(RoleInfoData recommendData)
+        {
+            _recommendDatas.Add(recommendData);
+        }
+        public void ClearRecommendDatas()
+        {
+            _recommendDatas.Clear();
+        }
+
+
+        private List<RoleInfoData> _searchDatas = new List<RoleInfoData>();//搜索列表
+        public List<RoleInfoData> SearchDatas
+        {
+            get
+            {
+                return _searchDatas;
+            }
+        }
+        public void AddSearchData(RoleInfoData searchData)
+        {
+            _searchDatas.Add(searchData);
+        }
+        public void ClearSearchDatas()
+        {
+            _searchDatas.Clear();
+        }
+
+        private List<FriendInfoData> _applyDatas = new List<FriendInfoData>();//申请添加好友列表
+        public List<FriendInfoData> ApplyDatas
+        {
+            get
+            {
+                return _applyDatas;
+            }
+        }
+        public void AddApplyData(FriendInfoData applyData)
+        {
+            _applyDatas.Add(applyData);
+        }
+        public void RemoveApplyData(long roleId)
+        {
+            for (int i = _applyDatas.Count - 1; i >= 0; i--)
+            {
+                if (roleId == _applyDatas[i].roleInfo.roleId)
+                {
+                    _applyDatas.RemoveAt(i);
+                }
+            }
+        }
+        public void ClearApplyDatas()
+        {
+            _applyDatas.Clear();
+        }
+
+        public int GetGiftState(long roleId)
+        {
+            FriendInfoData friendInfo = _friendDic[roleId];
+            if (friendInfo.takeGiftState == ConstBonusStatus.CAN_GET)
+            {
+                return 0;
+            }
+            if (friendInfo.giveGiftState == (int)ConstGiveGiftStatus.CanGave)
+            {
+                return 1;
+            }
+            if (friendInfo.giveGiftState == (int)ConstGiveGiftStatus.Gave)
+            {
+                return 2;
+            }
+            return 3;
+        }
 
     }
 }

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Data/LuckyBoxDataManager.cs

@@ -128,7 +128,7 @@ namespace GFGGame
             int hasNum = ItemDataManager.GetItemNum(itemCfg.id);
             if (hasNum >= costNum)
             {
-                Alert.Show(string.Format("是否花费{0}个{1}摘星{2}次?", costNum, itemCfg.name, times)).SetLeftButton(true).SetRightButton(true, "确定", (object data) => { onSuccess(); });
+                AlertUI.Show(string.Format("是否花费{0}个{1}摘星{2}次?", costNum, itemCfg.name, times)).SetLeftButton(true).SetRightButton(true, "确定", (object data) => { onSuccess(); });
             }
             else
             {

+ 35 - 0
GameClient/Assets/Game/HotUpdate/Data/RedDotDataManager.cs

@@ -91,5 +91,40 @@ namespace GFGGame
             }
             return false;
         }
+
+        /// <summary>
+        /// 好友红点
+        /// </summary>
+        /// <returns></returns>
+        public bool GetFriendRed()
+        {
+            return GetFriendApplyRed() || GetFriendGiftRed();
+        }
+        /// <summary>
+        /// 是否有好友申请
+        /// </summary>
+        /// <returns></returns>
+        public bool GetFriendApplyRed()
+        {
+            return FriendDataManager.Instance.ApplyDatas.Count > 0;
+        }
+        /// <summary>
+        /// 是否有好友可领体力
+        /// </summary>
+        /// <returns></returns>
+        public bool GetFriendGiftRed()
+        {
+            if (FriendDataManager.Instance.Count >= GlobalCfgArray.globalCfg.maxGetPowerCount) return false;
+
+            List<FriendInfoData> friendInfos = FriendDataManager.Instance.FriendDatas;
+            for (int i = 0; i < friendInfos.Count; i++)
+            {
+                if (friendInfos[i].takeGiftState == ConstBonusStatus.CAN_GET)
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
     }
 }

+ 1 - 0
GameClient/Assets/Game/HotUpdate/Data/RoleDataManager.cs

@@ -13,6 +13,7 @@ namespace GFGGame
         public static string roleName;
         public static int rechargeTotal;
         public static int rechargeTotalMon;
+        public static string slogan = "";
 
         public static int power
         {

+ 2 - 2
GameClient/Assets/Game/HotUpdate/Data/VO/CustomSuitData.cs

@@ -8,9 +8,9 @@ namespace GFGGame
             this.pos = index;
         }
         public int pos;
-        public List<int> equipDatas = new List<int>();
         public int bg;
-        public bool pic;
         public int suitId;
+        public bool pic;
+        public List<int> equipDatas = new List<int>();
     }
 }

+ 10 - 0
GameClient/Assets/Game/HotUpdate/Data/VO/FriendInfoData.cs

@@ -0,0 +1,10 @@
+namespace GFGGame
+{
+    public class FriendInfoData
+    {
+        public RoleInfoData roleInfo;
+        public int type;//好友关系类型,由FriendType枚举
+        public int giveGiftState;//赠送状态,由ConstGiveGiftStatus枚举
+        public int takeGiftState;//领取赠送状态,由ConstBonusStatus枚举
+    }
+}

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Common/Alert/Alert.cs.meta → GameClient/Assets/Game/HotUpdate/Data/VO/FriendInfoData.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: b0e523c41970f25488bb409903a79bc1
+guid: a61a03e4cbb866846b972b2faec880b7
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 17 - 0
GameClient/Assets/Game/HotUpdate/Data/VO/RoleInfoData.cs

@@ -0,0 +1,17 @@
+namespace GFGGame
+{
+    public class RoleInfoData
+    {
+        public long roleId;
+        public string roleName;
+        public int roleLv;
+        public long offlineTimeSec;//离线时间戳,单位秒,0表示在线
+
+    }
+
+    public class RoleInfoDetailData
+    {
+        public string slogan;
+        public CustomSuitData customSuitData;
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/Data/VO/RoleInfoData.cs.meta

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

+ 21 - 7
GameClient/Assets/Game/HotUpdate/DressUp/DressUpObjDataCache.cs

@@ -516,11 +516,25 @@ namespace GFGGame
             checkDefaultItem();
             UpdatePicAction();
         }
-
+        public CustomSuitData GetCurSuitData(int index)
+        {
+            CustomSuitData suitSavedData = new CustomSuitData(index);
+            suitSavedData.equipDatas = EquipDataCache.cacher.equipDatas;
+            suitSavedData.bg = EquipDataCache.cacher.bgId;
+            suitSavedData.pic = EquipDataCache.cacher.picStatus;
+            suitSavedData.suitId = EquipDataCache.cacher.suitId;
+            return suitSavedData;
+        }
         public void PutOnSuitSaved(int index)
         {
-            TakeOffAll(false);
+
             CustomSuitData suitSavedData = CustomSuitDataManager.GetSuitList(index);
+            PutOnSuitMemory(suitSavedData);
+        }
+
+        public void PutOnSuitMemory(CustomSuitData suitSavedData)
+        {
+            TakeOffAll(false);
             if (suitSavedData.bg > 0)
             {
                 AddOrRemove(suitSavedData.bg, false);
@@ -533,8 +547,8 @@ namespace GFGGame
             _isPic = suitSavedData.pic;
             checkDefaultItem();
             UpdatePicAction();
-        }
 
+        }
         public void PutOnSuitSavedInFight(int index)
         {
             TakeOffAll(false);
@@ -556,10 +570,10 @@ namespace GFGGame
             }
         }
 
-        public void PutOnCurrentSuitSaved()
-        {
-            PutOnSuitSaved(CustomSuitDataManager.currentIndex);
-        }
+        // public void PutOnCurrentSuitSaved()
+        // {
+        //     PutOnSuitSaved(CustomSuitDataManager.currentIndex);
+        // }
 
         public void PutOnDefaultSuitSaved(bool withBg = true)
         {

+ 1 - 1
GameClient/Assets/Game/HotUpdate/ETCodes/Hotfix/App/Account/A2C_DisconnectHandler.cs

@@ -26,7 +26,7 @@ namespace ET
                         });
                     break;
                 case ErrorCode.Err_ServerMaintain:
-                    Alert.Show("服务器维护中!")
+                    AlertUI.Show("服务器维护中!")
                         .SetLeftButton(true, "稍后再试", (obj) =>
                         {
                             Application.Quit();

+ 71 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_CompHead.cs

@@ -0,0 +1,71 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace UI.Friend
+{
+    public partial class UI_CompHead
+    {
+        public GComponent target;
+        public GLoader m_icon;
+        public const string URL = "ui://wez2ujnnpdeo5";
+        public const string PACKAGE_NAME = "Friend";
+        public const string RES_NAME = "CompHead";
+        private static UI_CompHead _proxy;
+
+        public static UI_CompHead Create(GObject gObject = null)
+        {
+            var ui = new UI_CompHead();
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static UI_CompHead Proxy(GObject gObject = null)
+        {
+            if(_proxy == null)
+            {
+                _proxy = new UI_CompHead();
+            }
+            var ui = _proxy;
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static void ProxyEnd()
+        {
+            if (_proxy != null)
+            {
+                _proxy.Dispose();
+            }
+        }
+
+        public static void ClearProxy()
+        {
+            ProxyEnd();
+            _proxy = null;
+        }
+
+        private void Init(GComponent comp)
+        {
+            m_icon = (GLoader)comp.GetChild("icon");
+        }
+        public void Dispose(bool disposeTarget = false)
+        {
+            m_icon = null;
+            if(disposeTarget && target != null)
+            {
+                target.RemoveFromParent();
+                target.Dispose();
+            }
+            target = null;
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_CompHead.cs.meta

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

+ 113 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_FriendAddUI.cs

@@ -0,0 +1,113 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace UI.Friend
+{
+    public partial class UI_FriendAddUI
+    {
+        public GComponent target;
+        public Controller m_c1;
+        public GTextField m_txtName;
+        public GButton m_btnTabSearch;
+        public GButton m_btnTabApply;
+        public GTextInput m_txtSearch;
+        public GButton m_btnClear;
+        public GButton m_btnSearch;
+        public GTextField m_txtTips;
+        public GButton m_btnRefresh;
+        public GList m_listSearch;
+        public GGroup m_grpSearch;
+        public GList m_listApply;
+        public GButton m_btnRefuseAll;
+        public GButton m_btnAgreeAll;
+        public GGroup m_grpApply;
+        public const string URL = "ui://wez2ujnnjdju2";
+        public const string PACKAGE_NAME = "Friend";
+        public const string RES_NAME = "FriendAddUI";
+        private static UI_FriendAddUI _proxy;
+
+        public static UI_FriendAddUI Create(GObject gObject = null)
+        {
+            var ui = new UI_FriendAddUI();
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static UI_FriendAddUI Proxy(GObject gObject = null)
+        {
+            if(_proxy == null)
+            {
+                _proxy = new UI_FriendAddUI();
+            }
+            var ui = _proxy;
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static void ProxyEnd()
+        {
+            if (_proxy != null)
+            {
+                _proxy.Dispose();
+            }
+        }
+
+        public static void ClearProxy()
+        {
+            ProxyEnd();
+            _proxy = null;
+        }
+
+        private void Init(GComponent comp)
+        {
+            m_c1 = comp.GetController("c1");
+            m_txtName = (GTextField)comp.GetChild("txtName");
+            m_btnTabSearch = (GButton)comp.GetChild("btnTabSearch");
+            m_btnTabApply = (GButton)comp.GetChild("btnTabApply");
+            m_txtSearch = (GTextInput)comp.GetChild("txtSearch");
+            m_btnClear = (GButton)comp.GetChild("btnClear");
+            m_btnSearch = (GButton)comp.GetChild("btnSearch");
+            m_txtTips = (GTextField)comp.GetChild("txtTips");
+            m_btnRefresh = (GButton)comp.GetChild("btnRefresh");
+            m_listSearch = (GList)comp.GetChild("listSearch");
+            m_grpSearch = (GGroup)comp.GetChild("grpSearch");
+            m_listApply = (GList)comp.GetChild("listApply");
+            m_btnRefuseAll = (GButton)comp.GetChild("btnRefuseAll");
+            m_btnAgreeAll = (GButton)comp.GetChild("btnAgreeAll");
+            m_grpApply = (GGroup)comp.GetChild("grpApply");
+        }
+        public void Dispose(bool disposeTarget = false)
+        {
+            m_c1 = null;
+            m_txtName = null;
+            m_btnTabSearch = null;
+            m_btnTabApply = null;
+            m_txtSearch = null;
+            m_btnClear = null;
+            m_btnSearch = null;
+            m_txtTips = null;
+            m_btnRefresh = null;
+            m_listSearch = null;
+            m_grpSearch = null;
+            m_listApply = null;
+            m_btnRefuseAll = null;
+            m_btnAgreeAll = null;
+            m_grpApply = null;
+            if(disposeTarget && target != null)
+            {
+                target.RemoveFromParent();
+                target.Dispose();
+            }
+            target = null;
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_FriendAddUI.cs.meta

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

+ 30 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_FriendUI.cs

@@ -7,8 +7,18 @@ namespace UI.Friend
     public partial class UI_FriendUI
     {
         public GComponent target;
+        public GLoader m_loaBg;
         public GButton m_btnBack;
+        public GTextField m_txtCount;
+        public GTextField m_txtName;
+        public GGroup m_grpName;
+        public GTextField m_txtSlogan;
+        public GGroup m_grpSlogan;
+        public GButton m_btnSolgan;
+        public GButton m_btnDelete;
         public GButton m_btnAdd;
+        public GList m_list;
+        public GButton m_btnSendAll;
         public const string URL = "ui://wez2ujnnjdju0";
         public const string PACKAGE_NAME = "Friend";
         public const string RES_NAME = "FriendUI";
@@ -56,13 +66,33 @@ namespace UI.Friend
 
         private void Init(GComponent comp)
         {
+            m_loaBg = (GLoader)comp.GetChild("loaBg");
             m_btnBack = (GButton)comp.GetChild("btnBack");
+            m_txtCount = (GTextField)comp.GetChild("txtCount");
+            m_txtName = (GTextField)comp.GetChild("txtName");
+            m_grpName = (GGroup)comp.GetChild("grpName");
+            m_txtSlogan = (GTextField)comp.GetChild("txtSlogan");
+            m_grpSlogan = (GGroup)comp.GetChild("grpSlogan");
+            m_btnSolgan = (GButton)comp.GetChild("btnSolgan");
+            m_btnDelete = (GButton)comp.GetChild("btnDelete");
             m_btnAdd = (GButton)comp.GetChild("btnAdd");
+            m_list = (GList)comp.GetChild("list");
+            m_btnSendAll = (GButton)comp.GetChild("btnSendAll");
         }
         public void Dispose(bool disposeTarget = false)
         {
+            m_loaBg = null;
             m_btnBack = null;
+            m_txtCount = null;
+            m_txtName = null;
+            m_grpName = null;
+            m_txtSlogan = null;
+            m_grpSlogan = null;
+            m_btnSolgan = null;
+            m_btnDelete = null;
             m_btnAdd = null;
+            m_list = null;
+            m_btnSendAll = null;
             if(disposeTarget && target != null)
             {
                 target.RemoveFromParent();

+ 80 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListApplyItem.cs

@@ -0,0 +1,80 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace UI.Friend
+{
+    public partial class UI_ListApplyItem
+    {
+        public GComponent target;
+        public GTextField m_txtName;
+        public GButton m_btnAgree;
+        public GButton m_btnRefuse;
+        public GTextField m_txtLvl;
+        public const string URL = "ui://wez2ujnnpdeoj";
+        public const string PACKAGE_NAME = "Friend";
+        public const string RES_NAME = "ListApplyItem";
+        private static UI_ListApplyItem _proxy;
+
+        public static UI_ListApplyItem Create(GObject gObject = null)
+        {
+            var ui = new UI_ListApplyItem();
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static UI_ListApplyItem Proxy(GObject gObject = null)
+        {
+            if(_proxy == null)
+            {
+                _proxy = new UI_ListApplyItem();
+            }
+            var ui = _proxy;
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static void ProxyEnd()
+        {
+            if (_proxy != null)
+            {
+                _proxy.Dispose();
+            }
+        }
+
+        public static void ClearProxy()
+        {
+            ProxyEnd();
+            _proxy = null;
+        }
+
+        private void Init(GComponent comp)
+        {
+            m_txtName = (GTextField)comp.GetChild("txtName");
+            m_btnAgree = (GButton)comp.GetChild("btnAgree");
+            m_btnRefuse = (GButton)comp.GetChild("btnRefuse");
+            m_txtLvl = (GTextField)comp.GetChild("txtLvl");
+        }
+        public void Dispose(bool disposeTarget = false)
+        {
+            m_txtName = null;
+            m_btnAgree = null;
+            m_btnRefuse = null;
+            m_txtLvl = null;
+            if(disposeTarget && target != null)
+            {
+                target.RemoveFromParent();
+                target.Dispose();
+            }
+            target = null;
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListApplyItem.cs.meta

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

+ 86 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListItem.cs

@@ -0,0 +1,86 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace UI.Friend
+{
+    public partial class UI_ListItem
+    {
+        public GButton target;
+        public Controller m_c1;
+        public Controller m_c2;
+        public GTextField m_txtLvl;
+        public GTextField m_txtName;
+        public GButton m_btnSend;
+        public GLoader m_loaState;
+        public const string URL = "ui://wez2ujnnpdeo9";
+        public const string PACKAGE_NAME = "Friend";
+        public const string RES_NAME = "ListItem";
+        private static UI_ListItem _proxy;
+
+        public static UI_ListItem Create(GObject gObject = null)
+        {
+            var ui = new UI_ListItem();
+            if(gObject == null)
+            	ui.target =  (GButton)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GButton)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static UI_ListItem Proxy(GObject gObject = null)
+        {
+            if(_proxy == null)
+            {
+                _proxy = new UI_ListItem();
+            }
+            var ui = _proxy;
+            if(gObject == null)
+            	ui.target =  (GButton)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GButton)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static void ProxyEnd()
+        {
+            if (_proxy != null)
+            {
+                _proxy.Dispose();
+            }
+        }
+
+        public static void ClearProxy()
+        {
+            ProxyEnd();
+            _proxy = null;
+        }
+
+        private void Init(GComponent comp)
+        {
+            m_c1 = comp.GetController("c1");
+            m_c2 = comp.GetController("c2");
+            m_txtLvl = (GTextField)comp.GetChild("txtLvl");
+            m_txtName = (GTextField)comp.GetChild("txtName");
+            m_btnSend = (GButton)comp.GetChild("btnSend");
+            m_loaState = (GLoader)comp.GetChild("loaState");
+        }
+        public void Dispose(bool disposeTarget = false)
+        {
+            m_c1 = null;
+            m_c2 = null;
+            m_txtLvl = null;
+            m_txtName = null;
+            m_btnSend = null;
+            m_loaState = null;
+            if(disposeTarget && target != null)
+            {
+                target.RemoveFromParent();
+                target.Dispose();
+            }
+            target = null;
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListItem.cs.meta

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

+ 86 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListSearchItem.cs

@@ -0,0 +1,86 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace UI.Friend
+{
+    public partial class UI_ListSearchItem
+    {
+        public GComponent target;
+        public Controller m_c1;
+        public Controller m_c2;
+        public GTextField m_txtLvl;
+        public GTextField m_txtName;
+        public GButton m_btnAdd;
+        public GLoader m_loaState;
+        public const string URL = "ui://wez2ujnnpdeoi";
+        public const string PACKAGE_NAME = "Friend";
+        public const string RES_NAME = "ListSearchItem";
+        private static UI_ListSearchItem _proxy;
+
+        public static UI_ListSearchItem Create(GObject gObject = null)
+        {
+            var ui = new UI_ListSearchItem();
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static UI_ListSearchItem Proxy(GObject gObject = null)
+        {
+            if(_proxy == null)
+            {
+                _proxy = new UI_ListSearchItem();
+            }
+            var ui = _proxy;
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static void ProxyEnd()
+        {
+            if (_proxy != null)
+            {
+                _proxy.Dispose();
+            }
+        }
+
+        public static void ClearProxy()
+        {
+            ProxyEnd();
+            _proxy = null;
+        }
+
+        private void Init(GComponent comp)
+        {
+            m_c1 = comp.GetController("c1");
+            m_c2 = comp.GetController("c2");
+            m_txtLvl = (GTextField)comp.GetChild("txtLvl");
+            m_txtName = (GTextField)comp.GetChild("txtName");
+            m_btnAdd = (GButton)comp.GetChild("btnAdd");
+            m_loaState = (GLoader)comp.GetChild("loaState");
+        }
+        public void Dispose(bool disposeTarget = false)
+        {
+            m_c1 = null;
+            m_c2 = null;
+            m_txtLvl = null;
+            m_txtName = null;
+            m_btnAdd = null;
+            m_loaState = null;
+            if(disposeTarget && target != null)
+            {
+                target.RemoveFromParent();
+                target.Dispose();
+            }
+            target = null;
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Friend/UI_ListSearchItem.cs.meta

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

+ 6 - 3
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Main/UI_RoleInfoUI.cs

@@ -10,6 +10,7 @@ namespace UI.Main
         public GLoader m_bg;
         public GTextField m_txtTitle;
         public GTextField m_txtRoleName;
+        public GLoader m_loaChangeName;
         public GTextField m_txtLvl;
         public GProgressBar m_proBarExp;
         public GButton m_btnSound;
@@ -18,7 +19,7 @@ namespace UI.Main
         public GButton m_btnExit;
         public GButton m_btnHelp;
         public GTextField m_txtVersion;
-        public GLoader m_loaChangeName;
+        public GTextInput m_txtSlogan;
         public const string URL = "ui://mfvz4q8kd4iw6k";
         public const string PACKAGE_NAME = "Main";
         public const string RES_NAME = "RoleInfoUI";
@@ -69,6 +70,7 @@ namespace UI.Main
             m_bg = (GLoader)comp.GetChild("bg");
             m_txtTitle = (GTextField)comp.GetChild("txtTitle");
             m_txtRoleName = (GTextField)comp.GetChild("txtRoleName");
+            m_loaChangeName = (GLoader)comp.GetChild("loaChangeName");
             m_txtLvl = (GTextField)comp.GetChild("txtLvl");
             m_proBarExp = (GProgressBar)comp.GetChild("proBarExp");
             m_btnSound = (GButton)comp.GetChild("btnSound");
@@ -77,13 +79,14 @@ namespace UI.Main
             m_btnExit = (GButton)comp.GetChild("btnExit");
             m_btnHelp = (GButton)comp.GetChild("btnHelp");
             m_txtVersion = (GTextField)comp.GetChild("txtVersion");
-            m_loaChangeName = (GLoader)comp.GetChild("loaChangeName");
+            m_txtSlogan = (GTextInput)comp.GetChild("txtSlogan");
         }
         public void Dispose(bool disposeTarget = false)
         {
             m_bg = null;
             m_txtTitle = null;
             m_txtRoleName = null;
+            m_loaChangeName = null;
             m_txtLvl = null;
             m_proBarExp = null;
             m_btnSound = null;
@@ -92,7 +95,7 @@ namespace UI.Main
             m_btnExit = null;
             m_btnHelp = null;
             m_txtVersion = null;
-            m_loaChangeName = null;
+            m_txtSlogan = null;
             if(disposeTarget && target != null)
             {
                 target.RemoveFromParent();

+ 410 - 5
GameClient/Assets/Game/HotUpdate/ServerProxy/FriendSProxy.cs

@@ -1,25 +1,430 @@
 using System.Collections.Generic;
-using ET;
 using GFGGame;
+using ET;
+namespace ET
+{
+    //推送其他玩家信息变化
+    public class NoticeRoleInfoChanged : AMHandler<S2C_NoticeFriendInfo>
+    {
+        protected override async ETTask Run(Session session, S2C_NoticeFriendInfo message)
+        {
+            RoleInfoData roleInfo = new RoleInfoData();
+            roleInfo.roleId = message.RoleInfo.RoleId;
+            roleInfo.roleLv = message.RoleInfo.RoleLvl;
+            roleInfo.roleName = message.RoleInfo.RoleName;
+            roleInfo.offlineTimeSec = message.RoleInfo.OfflineTimeSec;
+
+            FriendDataManager.Instance.ChangeFriendInfo(roleInfo);
+            EventAgent.DispatchEvent(ConstMessage.FRIEND_REFRESH);
+
+            await ETTask.CompletedTask;
+        }
+
+    }
+    //推送申请添加好友信息
+    public class NoticeApplyForFriend : AMHandler<S2C_NoticeApplyForFriend>
+    {
+        protected override async ETTask Run(Session session, S2C_NoticeApplyForFriend message)
+        {
+            List<FriendInfoData> applyDatas = FriendDataManager.Instance.ApplyDatas;
+            bool isSame = false;
+            for (int i = applyDatas.Count - 1; i >= 0; i--)
+            {
+                if (applyDatas[i].roleInfo.roleId == message.FriendInfo.RoleInfo.RoleId)
+                {
+                    isSame = true;
+                    break;
+                }
+            }
+            if (isSame) return;
+
+            RoleInfoData roleInfo = new RoleInfoData();
+            roleInfo.roleId = message.FriendInfo.RoleInfo.RoleId;
+            roleInfo.roleName = message.FriendInfo.RoleInfo.RoleName;
+            roleInfo.roleLv = message.FriendInfo.RoleInfo.RoleLvl;
+            roleInfo.offlineTimeSec = message.FriendInfo.RoleInfo.OfflineTimeSec;
+
+            FriendInfoData friendInfo = new FriendInfoData();
+            friendInfo.roleInfo = roleInfo;
+            friendInfo.type = message.FriendInfo.Type;
+            friendInfo.giveGiftState = message.FriendInfo.GiveGiftState;
+            friendInfo.takeGiftState = message.FriendInfo.TakeGiftState;
+
+            FriendDataManager.Instance.AddApplyData(friendInfo);
+            EventAgent.DispatchEvent(ConstMessage.FRIEND_APPLY_CHANGE);
+            EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
+
+            await ETTask.CompletedTask;
+        }
+    }
+
+    //推送新增好友
+    public class NoticeAddFriends : AMHandler<S2C_NoticeAddFriends>
+    {
+        protected override async ETTask Run(Session session, S2C_NoticeAddFriends message)
+        {
+            for (int i = 0; i < message.FriendList.Count; i++)
+            {
+                RoleInfoData roleInfo = new RoleInfoData();
+                roleInfo.roleId = message.FriendList[i].RoleInfo.RoleId;
+                roleInfo.roleName = message.FriendList[i].RoleInfo.RoleName;
+                roleInfo.roleLv = message.FriendList[i].RoleInfo.RoleLvl;
+                roleInfo.offlineTimeSec = message.FriendList[i].RoleInfo.OfflineTimeSec;
+
+                FriendInfoData friendInfo = new FriendInfoData();
+                friendInfo.roleInfo = roleInfo;
+                friendInfo.type = message.FriendList[i].Type;
+                friendInfo.giveGiftState = message.FriendList[i].GiveGiftState;
+                friendInfo.takeGiftState = message.FriendList[i].TakeGiftState;
+                FriendDataManager.Instance.AddFriend(friendInfo);
+                FriendDataManager.Instance.RemoveApplyData(message.FriendList[i].RoleInfo.RoleId);
+            }
+            EventAgent.DispatchEvent(ConstMessage.FRIEND_ADD);
+            EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
+            await ETTask.CompletedTask;
+        }
+    }
 
+    //推送删除好友
+    public class NoticeDeleteFriend : AMHandler<S2C_NoticeDeleteFriend>
+    {
+        protected override async ETTask Run(Session session, S2C_NoticeDeleteFriend message)
+        {
+            FriendDataManager.Instance.RemoveFriend(message.FriendId);
+            EventAgent.DispatchEvent(ConstMessage.FRIEND_REMOVE);
+            await ETTask.CompletedTask;
+        }
+    }
+
+    //推送领取赠送状态
+    public class NoticeTakeGiftStates : AMHandler<S2C_NoticeTakeGiftStates>
+    {
+        protected override async ETTask Run(Session session, S2C_NoticeTakeGiftStates message)
+        {
+            FriendDataManager.Instance.ChangeTakeGiftStates(message.FriendId, message.TakeGiftState);
+            EventAgent.DispatchEvent(ConstMessage.FRIEND_REFRESH);
+            EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
 
+            await ETTask.CompletedTask;
+        }
+    }
+}
 namespace GFGGame
 {
     public static class FriendSProxy
     {
-        public static async ETTask<bool> ClothingDecompose(List<int> itemIds, List<int> itemNums)
+        //请求所有好友信息
+        public static async ETTask<bool> ReqAllFriendInfos()
+        {
+            S2C_GetAllFriendInfos response = null;
+            response = (S2C_GetAllFriendInfos)await MessageHelper.SendToServer(new C2S_GetAllFriendInfos());
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    for (int i = 0; i < response.FriendList.Count; i++)
+                    {
+
+                        RoleInfoData roleInfo = new RoleInfoData();
+                        roleInfo.roleId = response.FriendList[i].RoleInfo.RoleId;
+                        roleInfo.roleName = response.FriendList[i].RoleInfo.RoleName;
+                        roleInfo.roleLv = response.FriendList[i].RoleInfo.RoleLvl;
+                        roleInfo.offlineTimeSec = response.FriendList[i].RoleInfo.OfflineTimeSec;
+
+                        FriendInfoData friendInfo = new FriendInfoData();
+                        friendInfo.roleInfo = roleInfo;
+                        friendInfo.type = response.FriendList[i].Type;
+                        friendInfo.giveGiftState = response.FriendList[i].GiveGiftState;
+                        friendInfo.takeGiftState = response.FriendList[i].TakeGiftState;
+                        if (response.FriendList[i].Type == FriendType.Good)
+                        {
+                            FriendDataManager.Instance.AddFriend(friendInfo);
+                        }
+                        else if (response.FriendList[i].Type == FriendType.Apply)
+                        {
+                            FriendDataManager.Instance.AddApplyData(friendInfo);
+                        }
+                    }
+                    return true;
+                }
+            }
+            return false;
+        }
+        //赠送
+        public static async ETTask<bool> ReqGiveGiftToFriend(long friendId)
+        {
+            S2C_GiveGiftToFriend response = null;
+            response = (S2C_GiveGiftToFriend)await MessageHelper.SendToServer(new C2S_GiveGiftToFriend() { FriendId = friendId });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    FriendDataManager.Instance.ChangeGiveGiftStates(response.FriendId, response.GiveGiftState);
+                    PromptController.Instance.ShowFloatTextPrompt(string.Format("赠送好友体力*{0}", GlobalCfgArray.globalCfg.onceGivePowerCount));
+                    EventAgent.DispatchEvent(ConstMessage.FRIEND_REFRESH);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //一键赠送
+        public static async ETTask<bool> ReqGiveGiftToAllFriend()
+        {
+            S2C_GiveGiftToAllFriends response = null;
+            response = (S2C_GiveGiftToAllFriends)await MessageHelper.SendToServer(new C2S_GiveGiftToAllFriends());
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    for (int i = 0; i < response.FriendIds.Count; i++)
+                    {
+                        FriendDataManager.Instance.ChangeGiveGiftStates(response.FriendIds[i], response.GiveGiftStates[i]);
+                    }
+                    if (response.FriendIds.Count > 0)
+                    {
+                        PromptController.Instance.ShowFloatTextPrompt(string.Format("送出{0}份体力", response.FriendIds.Count));
+                    }
+                    else
+                    {
+                        PromptController.Instance.ShowFloatTextPrompt("无好友可赠送体力");
+                    }
+                    EventAgent.DispatchEvent(ConstMessage.FRIEND_REFRESH);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //领取并赠送赠送
+        public static async ETTask<bool> ReqTakeGiftFromFriend(long friendId)
+        {
+            S2C_TakeGiftFromFriend response = null;
+            response = (S2C_TakeGiftFromFriend)await MessageHelper.SendToServer(new C2S_TakeGiftFromFriend() { FriendId = friendId });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    FriendDataManager.Instance.ChangeGiveTakeGiftStates(response.FriendId, response.GiveGiftState, response.TakeGiftState);
+                    PromptController.Instance.ShowFloatTextPrompt(string.Format("领取成功,获得体力*{0}", GlobalCfgArray.globalCfg.onceGivePowerCount));
+                    EventAgent.DispatchEvent(ConstMessage.FRIEND_REFRESH);
+                    EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //一键领取并赠送
+        public static async ETTask<bool> ReqTakeGiftFromAllFriend()
+        {
+            S2C_TakeGiftFromAllFriend response = null;
+            response = (S2C_TakeGiftFromAllFriend)await MessageHelper.SendToServer(new C2S_TakeGiftFromAllFriend());
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    for (int i = 0; i < response.FriendIds.Count; i++)
+                    {
+                        FriendDataManager.Instance.ChangeGiveTakeGiftStates(response.FriendIds[i], response.GiveGiftStates[i], response.TakeGiftStates[i]);
+                    }
+                    if (FriendDataManager.Instance.Count >= GlobalCfgArray.globalCfg.maxGetPowerCount)
+                    {
+                        PromptController.Instance.ShowFloatTextPrompt("今日体力已全部领取");
+                    }
+                    else
+                    {
+                        PromptController.Instance.ShowFloatTextPrompt(string.Format("已领取{0}体力", response.FriendIds.Count * GlobalCfgArray.globalCfg.onceGivePowerCount));
+                    }
+                    EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
+                    return true;
+                }
+            }
+            EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
+            return false;
+        }
+
+        //请求其他玩家详细信息
+        public static async ETTask<RoleInfoDetailData> ReqOtherRoleDetailInfo(long friendId)
+        {
+            S2C_GetOtherRoleDetailInfo response = null;
+            response = (S2C_GetOtherRoleDetailInfo)await MessageHelper.SendToServer(new C2S_GetOtherRoleDetailInfo() { RoleId = friendId });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    RoleInfoDetailData roleInfoDetail = new RoleInfoDetailData();
+                    roleInfoDetail.slogan = response.Signature;
+                    if (response.CustomSuit != null)
+                    {
+                        roleInfoDetail.customSuitData = new CustomSuitData(response.CustomSuit.Pos);
+                        roleInfoDetail.customSuitData.bg = response.CustomSuit.BgId;
+                        roleInfoDetail.customSuitData.suitId = response.CustomSuit.SuitId;
+                        roleInfoDetail.customSuitData.equipDatas = response.CustomSuit.EquipIds;
+                        roleInfoDetail.customSuitData.pic = response.CustomSuit.Pic;
+                    }
+
+                    return roleInfoDetail;
+                }
+            }
+            return null;
+        }
+
+        //请求搜索其他玩家
+        public static async ETTask<bool> ReqSearchRole(string roleName)
+        {
+            S2C_SearchRole response = null;
+            response = (S2C_SearchRole)await MessageHelper.SendToServer(new C2S_SearchRole() { RoleName = roleName });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    FriendDataManager.Instance.ClearSearchDatas();
+                    for (int i = 0; i < response.RoleList.Count; i++)
+                    {
+
+                        RoleInfoData roleInfo = new RoleInfoData();
+                        roleInfo.roleId = response.RoleList[i].RoleId;
+                        roleInfo.roleName = response.RoleList[i].RoleName;
+                        roleInfo.roleLv = response.RoleList[i].RoleLvl;
+                        roleInfo.offlineTimeSec = response.RoleList[i].OfflineTimeSec;
+                        FriendDataManager.Instance.AddSearchData(roleInfo);
+                    }
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //请求推荐好友
+        public static async ETTask<bool> ReqRecommendFriends()
+        {
+            S2C_GetRecommendFriends response = null;
+            response = (S2C_GetRecommendFriends)await MessageHelper.SendToServer(new C2S_GetRecommendFriends());
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    FriendDataManager.Instance.ClearRecommendDatas();
+                    for (int i = 0; i < response.RoleList.Count; i++)
+                    {
+                        RoleInfoData roleInfo = new RoleInfoData();
+                        roleInfo.roleId = response.RoleList[i].RoleId;
+                        roleInfo.roleName = response.RoleList[i].RoleName;
+                        roleInfo.roleLv = response.RoleList[i].RoleLvl;
+                        roleInfo.offlineTimeSec = response.RoleList[i].OfflineTimeSec;
+                        FriendDataManager.Instance.AddRecommendData(roleInfo);
+                    }
+                    return true;
+                }
+            }
+            return false;
+        }
+
+
+
+        //申请添加好友
+        public static async ETTask<bool> ReqApplyForFriend(long friendId)
         {
-            M2C_ClothingDecompose response = null;
-            response = (M2C_ClothingDecompose)await MessageHelper.SendToServer(new C2M_ClothingDecompose() { itemIds = itemIds, itemNums = itemNums });
+            S2C_RequestApplyForFriend response = null;
+            response = (S2C_RequestApplyForFriend)await MessageHelper.SendToServer(new C2S_RequestApplyForFriend() { FriendId = friendId });
             if (response != null)
             {
                 if (response.Error == ErrorCode.ERR_Success)
                 {
-                    BonusController.TryShowBonusList(ItemUtil.CreateItemDataList(response.bonusList));
                     return true;
                 }
             }
             return false;
         }
+
+        //同意添加好友
+        public static async ETTask<bool> ReqAcceptApplyForFriend(long friendId)
+        {
+            S2C_AcceptApplyForFriend response = null;
+            response = (S2C_AcceptApplyForFriend)await MessageHelper.SendToServer(new C2S_AcceptApplyForFriend() { FriendId = friendId });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    // FriendDataManager.Instance.RemoveApplyData(roleId);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //拒绝添加好友
+        public static async ETTask<bool> ReqRefuseApplyForFriend(long friendId)
+        {
+            S2C_RefuseApplyForFriend response = null;
+            response = (S2C_RefuseApplyForFriend)await MessageHelper.SendToServer(new C2S_RefuseApplyForFriend() { FriendId = friendId });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    FriendDataManager.Instance.RemoveApplyData(friendId);
+                    EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
+                    EventAgent.DispatchEvent(ConstMessage.FRIEND_APPLY_CHANGE);
+
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //一键同意添加好友
+        public static async ETTask<bool> ReqAcceptAllApplyForFriend()
+        {
+            S2C_AcceptAllApplyForFriend response = null;
+            response = (S2C_AcceptAllApplyForFriend)await MessageHelper.SendToServer(new C2S_AcceptAllApplyForFriend());
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //一键拒绝添加好友
+        public static async ETTask<bool> ReqRefuseAllApplyForFriend()
+        {
+            S2C_RefuseAllApplyForFriend response = null;
+            response = (S2C_RefuseAllApplyForFriend)await MessageHelper.SendToServer(new C2S_RefuseAllApplyForFriend());
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    FriendDataManager.Instance.ClearApplyDatas();
+                    EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
+                    EventAgent.DispatchEvent(ConstMessage.FRIEND_APPLY_CHANGE);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //请求删除好友
+        public static async ETTask<bool> ReqDeleteFriend(long friendId)
+        {
+            S2C_RequestDeleteFriend response = null;
+            response = (S2C_RequestDeleteFriend)await MessageHelper.SendToServer(new C2S_RequestDeleteFriend() { FriendId = friendId });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    FriendDataManager.Instance.RemoveFriend(response.FriendId);
+                    PromptController.Instance.ShowFloatTextPrompt("好友已删除");
+                    EventAgent.DispatchEvent(ConstMessage.FRIEND_REMOVE);
+
+                    return true;
+                }
+            }
+            return false;
+        }
+
+
     }
 }

+ 1 - 0
GameClient/Assets/Game/HotUpdate/ServerProxy/ItemProxy.cs

@@ -25,6 +25,7 @@ namespace GFGGame
                     ItemDataManager.InitServerData(response.Items);
                     //自定义套装
                     CustomSuitDataManager.InitServerData(response.CustomSuits);
+                    CustomSuitDataManager.currentIndex=response.CustomSuitPos;
                     //!!!必须放在最后,标记数据初始化完成
                     GameGlobal.DataInited = true;
                     return true;

+ 41 - 0
GameClient/Assets/Game/HotUpdate/ServerProxy/RoleInfoSProxy.cs

@@ -0,0 +1,41 @@
+using System.Collections.Generic;
+using ET;
+
+namespace GFGGame
+{
+    public static class RoleInfoSProxy
+    {
+        //请求个人信息
+        public static async ETTask<bool> ReqPersonalInfo()
+        {
+            S2C_GetPersonalInfo response = null;
+            response = (S2C_GetPersonalInfo)await MessageHelper.SendToServer(new C2S_GetPersonalInfo());
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    RoleDataManager.slogan = response.Signature;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        //修改个人签名
+        public static async ETTask<string> ReqModifySlogan(string slogan)
+        {
+            S2C_ModifySignature response = null;
+            response = (S2C_ModifySignature)await MessageHelper.SendToServer(new C2S_ModifySignature() { Signature = slogan });
+            if (response != null)
+            {
+                if (response.Error == ErrorCode.ERR_Success)
+                {
+                    RoleDataManager.slogan = response.Signature;
+                    return RoleDataManager.slogan;
+                }
+            }
+            return RoleDataManager.slogan;
+        }
+
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/ServerProxy/RoleInfoSProxy.cs.meta

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

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/ClothingDecompose/ClothingDecomposeView.cs

@@ -254,7 +254,7 @@ namespace GFGGame
         {
             if (_curRarity > ConstDressRarity.Rarity_ZHENXI)
             {
-                Alert.Show(string.Format("当前选择的稀有度为{0},是否确定分解?", ConstDressRarity.DressRarityList()[_curRarity])).SetLeftButton(true).SetRightButton(true, "确定", (object data) => { DecomposeItem(); });
+                AlertUI.Show(string.Format("当前选择的稀有度为{0},是否确定分解?", ConstDressRarity.DressRarityList()[_curRarity])).SetLeftButton(true).SetRightButton(true, "确定", (object data) => { DecomposeItem(); });
             }
             else
             {

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Common/Alert/Alert.cs → GameClient/Assets/Game/HotUpdate/Views/Common/Alert/AlertUI.cs

@@ -12,7 +12,7 @@
 
 namespace GFGGame
 {
-    public class Alert
+    public class AlertUI
     {
         private static AlertWindow _alertWindow;
 

+ 11 - 0
GameClient/Assets/Game/HotUpdate/Views/Common/Alert/AlertUI.cs.meta

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

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Common/Alert/AlertWindow.cs

@@ -31,7 +31,7 @@ namespace GFGGame
                 _ui.Dispose();
                 _ui = null;
             }
-            Alert.Dispose();
+            AlertUI.Dispose();
             AlertSystem.Dispose();
             base.Dispose();
         }

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/CommonGame/BuyConfirmView.cs

@@ -93,7 +93,7 @@ namespace GFGGame
                 }
                 else
                 {
-                    Alert.Show(costCfg.name + "不足,是否前往购买?").SetLeftButton(true).SetRightButton(true, "确认", (AlertWindow.AlertCallback)((object data) =>
+                    AlertUI.Show(costCfg.name + "不足,是否前往购买?").SetLeftButton(true).SetRightButton(true, "确认", (AlertWindow.AlertCallback)((object data) =>
                     {
                         int costNeedCount = coustNum - ItemDataManager.GetItemNum(costId);
                         BuyItemConteoller.Show(costId, costNeedCount, ConstBuyType.TYPE_ITEM, 0, null, true, true, GameConst.MAX_COUNT_TO_BUY_DIAMOND_RED);

+ 4 - 4
GameClient/Assets/Game/HotUpdate/Views/DressUp/DressUpFightView.cs

@@ -214,7 +214,7 @@ namespace GFGGame
         }
         private void OnClickBtnBack()
         {
-            Alert.Show("是否确定退出?")
+            AlertUI.Show("是否确定退出?")
             .SetLeftButton(true, "否").SetRightButton(true, "是", (object data) =>
             {
                 if (_levelCfg.type == ConstInstanceZonesType.Studio)
@@ -241,7 +241,7 @@ namespace GFGGame
 
         private void OnClickBtnHome()
         {
-            Alert.Show("是否返回?")
+            AlertUI.Show("是否返回?")
            .SetLeftButton(true, "否").SetRightButton(true, "是", (object data) =>
            {
                EquipDataCache.cacher.TakeOffAll();
@@ -390,14 +390,14 @@ namespace GFGGame
         {
             if (!EquipDataCache.cacher.CheckPutOnFinish())
             {
-                Alert.Show("只有换好衣服才能出门哦~")
+                AlertUI.Show("只有换好衣服才能出门哦~")
                     .SetRightButton(true, "好的");
                 return;
             }
             int _suitId = DressUpMenuSuitDataManager.CheckCurDressIsSuit(); ;
             if (_fightCfg.needItemId > 0 && (_suitId <= 0 && EquipDataCache.cacher.equipDatas.IndexOf(_fightCfg.needItemId) < 0 || _suitId > 0 && Array.IndexOf(SuitCfgArray.Instance.GetCfg(_suitId).partsArr, _fightCfg.needItemId) < 0) || _fightCfg.needSuitId > 0 && _suitId != _fightCfg.needSuitId)
             {
-                Alert.Show("未穿戴必须品~").SetRightButton(true, "好的");
+                AlertUI.Show("未穿戴必须品~").SetRightButton(true, "好的");
                 return;
             }
             if (CardDataManager.GetCardListByRarity(0).Count > 0)

+ 56 - 6
GameClient/Assets/Game/HotUpdate/Views/DressUp/DressUpView.cs

@@ -8,6 +8,7 @@ namespace GFGGame
 {
     public class DressUpView : BaseView
     {
+        public const int MAX_MEMORY_STEP = 20;//最大记录步数
         public const int BOTTOM_BLANK = 20;
         public const int RIGHT_BLANK = 36;
         private const int SORT_BY_HIGH_RARITY = 0;
@@ -32,6 +33,8 @@ namespace GFGGame
         private UI_TypeItem listTypeItem_FreedomDress;
         private List<LongPressGesture> _listLongPress = new List<LongPressGesture>();
 
+        private int _stepIndex = -1;
+        private List<CustomSuitData> _dressMemory = new List<CustomSuitData>();
         public override void Dispose()
         {
             if (_sceneObject != null)
@@ -75,12 +78,13 @@ namespace GFGGame
             InitLists();
             _ui.m_btnBack.onClick.Add(OnClickBtnBack);
             _ui.m_btnHome.onClick.Add(OnClickBtnHome);
+            _ui.m_btnLastStep.onClick.Add(OnClickBtnLastStep);
+            _ui.m_btnNextStep.onClick.Add(OnClickBtnNextStep);
             _ui.m_comboBox.onChanged.Add(OnComboBoxChanged);
             _ui.m_comListType1.m_listType.onClickItem.Add(OnClickListType1Item);
             _ui.m_comListType2.m_listType.onClickItem.Add(OnClickListType2Item);
             // _ui.m_partsList.m_list.SetVirtual();
             _ui.m_partsList.m_list.onClickItem.Add(OnClickPartsListItem);
-            // _ui.m_partsList2.m_list.SetVirtual();
             _ui.m_partsList2.m_list.onClickItem.Add(OnClickSuitPartsListItem);
             _ui.m_touchPad.onClick.Add(OnTouchPad);
             _ui.m_btnDelete.onClick.Add(OnClickBtnDelete);
@@ -121,8 +125,9 @@ namespace GFGGame
                 EquipDataCache.cacher.setSceneObj(_sceneObject);
             }
             _ui.m_comboBox.selectedIndex = CustomSuitDataManager.currentIndex;
-            EquipDataCache.cacher.PutOnCurrentSuitSaved();
-
+            EquipDataCache.cacher.PutOnSuitSaved(CustomSuitDataManager.currentIndex);
+            // UpdateStepBtn();
+            AddMemoryDressup();
             Timers.inst.AddUpdate(CheckGuide);
         }
 
@@ -165,6 +170,25 @@ namespace GFGGame
             DressUpMenuItemDataManager.dressFilterType = DressFilterType.None;
             DressUpMenuItemDataManager.Clear();
             DressUpMenuItemDataManager.dressSearchTxt = "";
+            _stepIndex = -1;
+            _dressMemory.Clear();
+        }
+        private void OnClickBtnLastStep()
+        {
+            if (_stepIndex - 1 < 0) return;
+            _stepIndex--;
+            EquipDataCache.cacher.PutOnSuitMemory(_dressMemory[_stepIndex]);
+            _ui.m_comboBox.selectedIndex = _dressMemory[_stepIndex].pos;
+            UpdateStepBtn();
+        }
+        private void OnClickBtnNextStep()
+        {
+            if (_stepIndex + 1 >= MAX_MEMORY_STEP) return;
+            _stepIndex++;
+            EquipDataCache.cacher.PutOnSuitMemory(_dressMemory[_stepIndex]);
+            _ui.m_comboBox.selectedIndex = _dressMemory[_stepIndex].pos;
+            UpdateStepBtn();
+
         }
         private void OnComboBoxChanged()
         {
@@ -224,7 +248,8 @@ namespace GFGGame
             }
             GObject listItem = (GObject)context.data as GObject;
             int id = (int)listItem.data;
-            if (_currentMenuType == (int)ConstDressUpItemType.TAO_ZHUANG)
+            bool isSuit = SuitCfgManager.Instance.GetTotalCountOfOneSuit(id) > 0;
+            if (isSuit)
             {
                 this.showListParts2(id);
                 this.hideListParts();
@@ -237,10 +262,11 @@ namespace GFGGame
                 EquipDataCache.cacher.AddOrRemove(id, true);
             }
             UpdateListPartsSelected();
-            UpdateListSuitPartsSelected();
-
+            UpdateListSuitPartsSelected(); ;
+            AddMemoryDressup();
         }
 
+
         private void OnClickSuitPartsListItem(EventContext context)
         {
             if (ViewManager.isViewOpen(typeof(DressUpItemTipsView).FullName))
@@ -255,7 +281,31 @@ namespace GFGGame
 
             UpdateListSuitPartsSelected();
             UpdateBtnAction();
+            AddMemoryDressup();
         }
+        private void AddMemoryDressup()
+        {
+            return;
+            _stepIndex++;
+            if (_stepIndex == MAX_MEMORY_STEP)
+            {
+                _stepIndex = MAX_MEMORY_STEP - 1;
+                _dressMemory.RemoveAt(0);
+            }
+            if (_dressMemory.Count > _stepIndex)
+            {
+                _dressMemory.RemoveRange(_stepIndex, _dressMemory.Count - _stepIndex);
+            }
+            CustomSuitData suitSavedData = EquipDataCache.cacher.GetCurSuitData(_ui.m_comboBox.selectedIndex);
+            _dressMemory.Add(suitSavedData);
+            UpdateStepBtn();
+        }
+        private void UpdateStepBtn()
+        {
+            _ui.m_btnLastStep.enabled = _stepIndex > 0;
+            _ui.m_btnNextStep.enabled = _stepIndex < _dressMemory.Count - 1;
+        }
+
         private void OnLongPress(EventContext context)
         {
             LongPressGesture gesture = (LongPressGesture)context.sender;

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Field/FieldFightInfoView.cs

@@ -82,7 +82,7 @@ namespace GFGGame
         private void OnBtnStopClick()
         {
             Timers.inst.Remove(OnTimerUpdate);
-            Alert.Show("确认中止本轮挑战?")
+            AlertUI.Show("确认中止本轮挑战?")
             .SetLeftButton(true, "取消", (object data) =>
             {
                 Timers.inst.Add(1, _time, OnTimerUpdate, 1);

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Field/FieldView.cs

@@ -148,7 +148,7 @@ namespace GFGGame
             }
             if (_dataManager.fieldInfos.bonusWeekly >= _dataManager.fieldInfos.bonusMaxLimit)
             {
-                Alert.Show("本周可获得奖励已达上限,是否继续挑战?")
+                AlertUI.Show("本周可获得奖励已达上限,是否继续挑战?")
                 .SetLeftButton(true)
                 .SetRightButton(true, "确定", (object data) =>
                 {

+ 240 - 0
GameClient/Assets/Game/HotUpdate/Views/Friend/FriendAddView.cs

@@ -0,0 +1,240 @@
+using UnityEngine;
+using FairyGUI;
+using UI.Friend;
+using System.Collections.Generic;
+
+namespace GFGGame
+{
+    public class FriendAddView : BaseWindow
+    {
+        private UI_FriendAddUI _ui;
+
+        private List<RoleInfoData> _searchDatas = new List<RoleInfoData>();
+        public override void Dispose()
+        {
+            if (_ui != null)
+            {
+                _ui.Dispose();
+                _ui = null;
+            }
+            base.Dispose();
+        }
+
+        protected override void Init()
+        {
+            base.Init();
+            packageName = UI_FriendAddUI.PACKAGE_NAME;
+            _ui = UI_FriendAddUI.Create();
+            this.viewCom = _ui.target;
+            this.viewCom.Center();
+            this.modal = true;
+            viewAnimationType = EnumViewAnimationType.ZOOM_CENTER;
+
+            _ui.m_listSearch.itemRenderer = RenderListSearchItem;
+            _ui.m_btnSearch.onClick.Add(OnBtnSearchClick);
+            _ui.m_btnClear.onClick.Add(OnBtnClearClick);
+            _ui.m_btnRefresh.onClick.Add(OnBtnRefreshClick);
+
+            _ui.m_listApply.itemRenderer = RenderListApplyItem;
+            _ui.m_btnAgreeAll.onClick.Add(OnBtnAgreeAllClick);
+            _ui.m_btnRefuseAll.onClick.Add(OnBtnRefuseAllClick);
+        }
+
+        protected override void OnInit()
+        {
+            base.OnInit();
+
+            // _ui.m_c1.onChanged.Add(OnCtrlChange);
+
+        }
+        protected override void AddEventListener()
+        {
+            base.AddEventListener();
+            EventAgent.AddEventListener(ConstMessage.FRIEND_APPLY_CHANGE, UpdateApplyList);
+            EventAgent.AddEventListener(ConstMessage.FRIEND_ADD, UpdateApplyList);
+            EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdaterRed);
+
+        }
+        protected override void OnShown()
+        {
+            base.OnShown();
+            _ui.m_c1.selectedIndex = 0;
+            _ui.m_txtSearch.text = "";
+            _ui.m_btnClear.visible = false;
+            OnBtnRefreshClick();
+            UpdateApplyList();
+            UpdaterRed();
+        }
+
+        protected override void OnHide()
+        {
+            base.OnHide();
+        }
+        protected override void RemoveEventListener()
+        {
+            base.RemoveEventListener();
+            EventAgent.RemoveEventListener(ConstMessage.FRIEND_APPLY_CHANGE, UpdateApplyList);
+            EventAgent.RemoveEventListener(ConstMessage.FRIEND_ADD, UpdateApplyList);
+            EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdaterRed);
+        }
+
+        /**************************************************好友搜索***********************************************/
+
+        private void RenderListSearchItem(int index, GObject obj)
+        {
+            RoleInfoData roleInfoData = _searchDatas[index];
+
+            UI_ListSearchItem item = UI_ListSearchItem.Proxy(obj);
+            item.m_txtName.text = roleInfoData.roleName;
+            item.m_txtLvl.text = roleInfoData.roleLv.ToString();
+            item.m_c1.selectedIndex = 0;
+            item.m_c2.selectedIndex = roleInfoData.offlineTimeSec == 0 ? 0 : 1;
+            if (item.m_btnAdd.data == null)
+            {
+                item.m_btnAdd.onClick.Add(OnBtnAddClick);
+            }
+            item.m_btnAdd.data = roleInfoData.roleId;
+            UI_ListSearchItem.ProxyEnd();
+        }
+
+        //添加好友
+        private async void OnBtnAddClick(EventContext context)
+        {
+            GObject obj = context.sender as GObject;
+            long roleId = (long)obj.data;
+            bool result = await FriendSProxy.ReqApplyForFriend(roleId);
+            if (result)
+            {
+                UI_ListSearchItem item = UI_ListSearchItem.Proxy(obj.parent);
+                item.m_c1.selectedIndex = 1;
+                UI_ListSearchItem.ProxyEnd();
+            }
+        }
+
+        //搜索好友
+        private async void OnBtnSearchClick()
+        {
+            if (_ui.m_txtSearch.text.Length == 0)
+            {
+                PromptController.Instance.ShowFloatTextPrompt("查无此人");
+                return;
+            }
+            if (_ui.m_txtSearch.text.Length < 2)
+            {
+                PromptController.Instance.ShowFloatTextPrompt("请输入至少两个字符");
+                return;
+            }
+            bool result = await FriendSProxy.ReqSearchRole(_ui.m_txtSearch.text);
+            if (result)
+            {
+                _ui.m_txtTips.text = "搜索结果";
+                _ui.m_btnClear.visible = true;
+                _searchDatas = FriendDataManager.Instance.SearchDatas;
+                _ui.m_listSearch.numItems = _searchDatas.Count;
+                if (_searchDatas.Count == 0)
+                {
+                    PromptController.Instance.ShowFloatTextPrompt("查无此人");
+                    return;
+                }
+            }
+        }
+
+        //清空搜索
+        private void OnBtnClearClick()
+        {
+            _ui.m_txtSearch.text = "";
+            _ui.m_btnClear.visible = false;
+            OnBtnRefreshClick();
+        }
+
+        //刷新好友列表
+        private async void OnBtnRefreshClick()
+        {
+            _ui.m_txtTips.text = "推荐好友";
+            _ui.m_listSearch.numItems = 0;
+
+            bool result = await FriendSProxy.ReqRecommendFriends();
+            if (result)
+            {
+                _searchDatas = FriendDataManager.Instance.RecommendDatas;
+                _ui.m_listSearch.numItems = _searchDatas.Count;
+            }
+        }
+
+        /**************************************************好友申请***********************************************/
+        private void UpdateApplyList()
+        {
+            _ui.m_listApply.numItems = FriendDataManager.Instance.ApplyDatas.Count;
+        }
+        private void RenderListApplyItem(int index, GObject obj)
+        {
+            FriendInfoData data = FriendDataManager.Instance.ApplyDatas[index];
+            UI_ListApplyItem item = UI_ListApplyItem.Proxy(obj);
+            item.m_txtName.text = data.roleInfo.roleName;
+            item.m_txtLvl.text = data.roleInfo.roleLv.ToString();
+            if (item.m_btnAgree.data == null)
+            {
+                item.m_btnAgree.onClick.Add(OnBtnAgreeClick);
+            }
+            item.m_btnAgree.data = data.roleInfo.roleId;
+
+            if (item.m_btnRefuse.data == null)
+            {
+                item.m_btnRefuse.onClick.Add(OnBtnRefuseClick);
+            }
+            item.m_btnRefuse.data = data.roleInfo.roleId;
+
+            UI_ListApplyItem.ProxyEnd();
+        }
+        //通过好友申请
+        private async void OnBtnAgreeClick(EventContext context)
+        {
+            GObject obj = context.sender as GObject;
+            long roleId = (long)obj.data;
+            bool result = await FriendSProxy.ReqAcceptApplyForFriend(roleId);
+            if (result)
+            {
+                _ui.m_listApply.numItems = FriendDataManager.Instance.ApplyDatas.Count;
+            }
+        }
+
+        //拒绝好友申请
+        private async void OnBtnRefuseClick(EventContext context)
+        {
+            GObject obj = context.sender as GObject;
+            long roleId = (long)obj.data;
+            bool result = await FriendSProxy.ReqRefuseApplyForFriend(roleId);
+            if (result)
+            {
+                _ui.m_listApply.numItems = FriendDataManager.Instance.ApplyDatas.Count;
+            }
+        }
+
+        //一键通过好友申请
+        private void OnBtnAgreeAllClick()
+        {
+            if (FriendDataManager.Instance.ApplyDatas.Count == 0) return;
+
+            FriendSProxy.ReqAcceptAllApplyForFriend().Coroutine();
+        }
+
+        //一键拒绝好友申请
+        private void OnBtnRefuseAllClick()
+        {
+            if (FriendDataManager.Instance.ApplyDatas.Count == 0) return;
+            AlertUI.Show("是否拒绝所有好友申请?").SetLeftButton(true).SetRightButton(true, "确定", async (object data) =>
+            {
+                bool result = await FriendSProxy.ReqRefuseAllApplyForFriend();
+                if (result)
+                {
+                    _ui.m_listApply.numItems = 0;
+                }
+            });
+        }
+
+        private void UpdaterRed()
+        {
+            RedDotController.Instance.SetComRedDot(_ui.m_btnTabApply, RedDotDataManager.Instance.GetFriendApplyRed());
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/Views/Friend/FriendAddView.cs.meta

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

+ 217 - 2
GameClient/Assets/Game/HotUpdate/Views/Friend/FriendView.cs

@@ -11,6 +11,8 @@ namespace GFGGame
         private GameObject _scenePrefab;
         private GameObject _sceneObject;
 
+        private FriendInfoData _curSelectedInfo;
+
         public override void Dispose()
         {
             if (_sceneObject != null)
@@ -35,14 +37,31 @@ namespace GFGGame
             viewCom = _ui.target;
             isfullScreen = true;
             _scenePrefab = GFGAsset.Load<GameObject>(ResPathUtil.GetPrefabPath("SceneFriend"));
+
+            _ui.m_list.SetVirtual();
+            _ui.m_list.itemRenderer = RenderListItem;
+            _ui.m_list.onClickItem.Add(OnListItemClick);
+
+            _ui.m_btnSolgan.onClick.Add(OnBtnSloganClick);
+            _ui.m_btnDelete.onClick.Add(OnBtnDeleteClick);
+            _ui.m_btnAdd.onClick.Add(OnBtnAddClick);
+            _ui.m_btnSendAll.onClick.Add(OnBtnSendAllClick);
         }
 
         protected override void OnInit()
         {
             base.OnInit();
             _ui.m_btnBack.onClick.Add(OnHide);
-        }
 
+        }
+        protected override void AddEventListener()
+        {
+            base.AddEventListener();
+            EventAgent.AddEventListener(ConstMessage.FRIEND_REFRESH, RefreshView);
+            EventAgent.AddEventListener(ConstMessage.FRIEND_REMOVE, RefreshRemoveFriend);
+            EventAgent.AddEventListener(ConstMessage.FRIEND_ADD, RefreshAddFriend);
+            EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdaterRed);
+        }
         protected override void OnShown()
         {
             base.OnShown();
@@ -51,18 +70,214 @@ namespace GFGGame
                 _sceneObject = GameObject.Instantiate(_scenePrefab);
                 EquipDataCache.cacher.setSceneObj(_sceneObject);
             }
-            EquipDataCache.cacher.PutOnCurrentSuitSaved();
+            _ui.m_grpSlogan.visible = false;
+            _ui.m_list.numItems = FriendDataManager.Instance.FriendDatas.Count;
+
+            if (_ui.m_list.numItems > 0)
+            {
+                _ui.m_list.selectedIndex = 0;
+                ReqFriendDetialInfo(0);
+            }
+            else
+            {
+                ReqFriendDetialInfo(-1);
+            }
 
+            RefreshView();
+            UpdaterRed();
         }
 
         protected override void OnHide()
         {
+            base.OnHide();
             if (_sceneObject != null)
             {
                 GameObject.Destroy(_sceneObject);
                 _sceneObject = null;
             }
+            _ui.m_list.numItems = 0;
             ViewManager.GoBackFrom(typeof(FriendView).FullName);
         }
+        protected override void RemoveEventListener()
+        {
+            base.RemoveEventListener();
+            EventAgent.RemoveEventListener(ConstMessage.FRIEND_REFRESH, RefreshView);
+            EventAgent.RemoveEventListener(ConstMessage.FRIEND_REMOVE, RefreshRemoveFriend);
+            EventAgent.RemoveEventListener(ConstMessage.FRIEND_ADD, RefreshAddFriend);
+            EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdaterRed);
+
+        }
+
+        private void RefreshView()
+        {
+            _ui.m_list.RefreshVirtualList();
+            _ui.m_txtCount.text = string.Format("好友数:{0}/{1}", _ui.m_list.numItems, GlobalCfgArray.globalCfg.maxFriendCount);
+            _ui.m_btnSendAll.text = RedDotDataManager.Instance.GetFriendGiftRed() ? "一键领取并赠送" : "一键赠送";
+        }
+
+
+        private void RenderListItem(int index, GObject obj)
+        {
+            FriendInfoData friendInfo = FriendDataManager.Instance.FriendDatas[index];
+
+            UI_ListItem item = UI_ListItem.Proxy(obj);
+            item.m_txtName.text = friendInfo.roleInfo.roleName;
+            item.m_txtLvl.text = friendInfo.roleInfo.roleLv.ToString();
+            item.m_c2.selectedIndex = friendInfo.roleInfo.offlineTimeSec == 0 ? 0 : 1;
+            item.m_c1.selectedIndex = FriendDataManager.Instance.GetGiftState(friendInfo.roleInfo.roleId);
+            if (item.m_btnSend.data == null)
+            {
+                item.m_btnSend.onClick.Add(OnClickBtnSend);
+            }
+            item.m_btnSend.data = friendInfo;
+            item.target.data = index;
+
+            UI_ListItem.ProxyEnd();
+        }
+        private void OnClickBtnSend(EventContext context)
+        {
+            GObject item = context.sender as GObject;
+            FriendInfoData friendInfo = item.data as FriendInfoData;
+            if (friendInfo.takeGiftState == ConstBonusStatus.CAN_GET)
+            {
+                if (FriendDataManager.Instance.Count >= GlobalCfgArray.globalCfg.maxGetPowerCount)
+                {
+                    PromptController.Instance.ShowFloatTextPrompt("今日体力已全部领取");
+                    return;
+                }
+                FriendSProxy.ReqTakeGiftFromFriend(friendInfo.roleInfo.roleId).Coroutine();
+            }
+            else if (friendInfo.giveGiftState == (int)ConstGiveGiftStatus.CanGave)
+            {
+                FriendSProxy.ReqGiveGiftToFriend(friendInfo.roleInfo.roleId).Coroutine();
+            }
+        }
+        private void OnListItemClick(EventContext context)
+        {
+            GObject item = context.data as GObject;
+            int index = (int)item.data;
+            ReqFriendDetialInfo(index);
+        }
+
+
+
+
+        private void OnBtnSendAllClick()
+        {
+            if (RedDotDataManager.Instance.GetFriendGiftRed() && FriendDataManager.Instance.Count < GlobalCfgArray.globalCfg.maxGetPowerCount)
+            {
+                FriendSProxy.ReqTakeGiftFromAllFriend().Coroutine();
+            }
+            else
+            {
+                FriendSProxy.ReqGiveGiftToAllFriend().Coroutine();
+            }
+        }
+
+        private void OnBtnDeleteClick()
+        {
+            if (_ui.m_list.numItems == 0)
+            {
+                PromptController.Instance.ShowFloatTextPrompt("暂无好友可删除");
+                return;
+            }
+
+            AlertUI.Show("是否删除好友?").SetLeftButton(true).SetRightButton(true, "确定", (object data) =>
+            {
+                int index = _ui.m_list.selectedIndex;
+                long roleId = FriendDataManager.Instance.FriendDatas[index].roleInfo.roleId;
+                FriendSProxy.ReqDeleteFriend(roleId).Coroutine();
+            });
+        }
+
+        private void RefreshRemoveFriend()
+        {
+            int index = _ui.m_list.selectedIndex;
+            _ui.m_list.numItems = FriendDataManager.Instance.FriendDatas.Count;
+            if (FriendDataManager.Instance.FriendDatas.Count > 0)
+            {
+                if (index >= FriendDataManager.Instance.FriendDatas.Count)
+                {
+                    index = FriendDataManager.Instance.FriendDatas.Count - 1;//选中最后一个
+                }
+                _ui.m_list.selectedIndex = index;
+            }
+            else
+            {
+                index = -1;//无好友
+            }
+            ReqFriendDetialInfo(index);
+            _ui.m_txtCount.text = string.Format("好友数:{0}/{1}", _ui.m_list.numItems, GlobalCfgArray.globalCfg.maxFriendCount);
+        }
+
+
+        private void RefreshAddFriend()
+        {
+            int selectedIndex = 0;
+            if (_ui.m_list.numItems > 0)
+            {
+                int childIndex = _ui.m_list.ItemIndexToChildIndex(_ui.m_list.selectedIndex);
+                GButton item = _ui.m_list.GetChildAt(childIndex).asButton.GetChild("btnSend").asButton;
+                FriendInfoData friendInfo = item.data as FriendInfoData;
+                selectedIndex = FriendDataManager.Instance.FriendDatas.IndexOf(friendInfo);
+            }
+            _ui.m_list.numItems = FriendDataManager.Instance.FriendDatas.Count;
+            _ui.m_list.selectedIndex = selectedIndex;
+            ReqFriendDetialInfo(selectedIndex);
+
+            _ui.m_txtCount.text = string.Format("好友数:{0}/{1}", _ui.m_list.numItems, GlobalCfgArray.globalCfg.maxFriendCount);
+        }
+
+        private async void ReqFriendDetialInfo(int index)
+        {
+            if (index >= 0)
+            {
+                long roleId = FriendDataManager.Instance.FriendDatas[index].roleInfo.roleId;
+                RoleInfoDetailData roleInfoDetail = await FriendSProxy.ReqOtherRoleDetailInfo(roleId);
+                if (roleInfoDetail != null)
+                {
+                    UpdateScene(roleInfoDetail.customSuitData);
+                    _ui.m_txtSlogan.text = string.IsNullOrEmpty(roleInfoDetail.slogan) ? "暂无简介" : roleInfoDetail.slogan;
+                }
+            }
+            else
+            {
+                CustomSuitData customSuit = CustomSuitDataManager.GetSuitList(CustomSuitDataManager.currentIndex);
+                UpdateScene(customSuit);
+                _ui.m_txtSlogan.text = string.IsNullOrEmpty(RoleDataManager.slogan) ? "暂无简介" : RoleDataManager.slogan;
+            }
+        }
+        private void UpdateScene(CustomSuitData suitSavedData)
+        {
+
+            if (suitSavedData != null)
+            {
+                EquipDataCache.cacher.PutOnSuitMemory(suitSavedData);
+                _ui.m_txtName.text = string.Format("我的套装{0}", NumberUtil.GetChiniseNumberText(suitSavedData.pos + 1));
+
+            }
+            else
+            {
+                EquipDataCache.cacher.PutOnDefaultSuitSaved();
+                _ui.m_txtName.text = string.Format("我的套装{0}", NumberUtil.GetChiniseNumberText(1));
+
+            }
+        }
+
+
+        private void OnBtnSloganClick()
+        {
+            _ui.m_grpSlogan.visible = !_ui.m_grpSlogan.visible;
+        }
+        private void OnBtnAddClick()
+        {
+            ViewManager.Show<FriendAddView>();
+        }
+
+        private void UpdaterRed()
+        {
+            RedDotController.Instance.SetComRedDot(_ui.m_btnAdd, RedDotDataManager.Instance.GetFriendApplyRed());
+            RedDotController.Instance.SetComRedDot(_ui.m_btnSendAll, RedDotDataManager.Instance.GetFriendGiftRed());
+        }
     }
 }

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Mail/MailView.cs

@@ -184,7 +184,7 @@ namespace GFGGame
                 PromptController.Instance.ShowFloatTextPrompt("暂无邮件可删除");
                 return;
             }
-            Alert.Show("是否删除所有已读文件?").SetLeftButton(true).SetRightButton(true, "确认", (object data) =>
+            AlertUI.Show("是否删除所有已读文件?").SetLeftButton(true).SetRightButton(true, "确认", (object data) =>
             {
                 SendDeleteAll();
             });

+ 3 - 2
GameClient/Assets/Game/HotUpdate/Views/MainUI/MainUIView.cs

@@ -104,7 +104,7 @@ namespace GFGGame
             _btnField = _ui.m_list.GetChild("btnField").asButton;
 
             // _btnGongGao.visible = false;
-            _btnHaoYou.visible = false;
+            // _btnHaoYou.visible = false;
             // _btnRenWu.visible = false;
             _btnPengYouQuan.visible = false;
             _btnJInShu.visible = false;
@@ -413,7 +413,7 @@ namespace GFGGame
             _ui.m_btnHuanZhuang.target.visible = FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(DressUpView).Name, false);
 
             _btnGongGao.visible = FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(NoticeView).Name, false);
-            // _btnHaoYou.visible = FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(FriendView).Name, false);
+            _btnHaoYou.visible = FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(FriendView).Name, false);
             _btnYouJian.visible = FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(MailView).Name, false);
             _btnStore.visible = FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(RechargeStoreView).Name, false);
             _btnTuJian.visible = FunctionOpenDataManager.Instance.CheckIsFunOpenById(typeof(FieldGuideView).Name, false);
@@ -432,6 +432,7 @@ namespace GFGGame
             RedDotController.Instance.SetComRedDot(_ui.m_btnDailyLogin.target, RedDotDataManager.Instance.GetDailyLoginRed());
             RedDotController.Instance.SetComRedDot(_btnYouJian, RedDotDataManager.Instance.GetMailRed());
             RedDotController.Instance.SetComRedDot(_btnTuJian, RedDotDataManager.Instance.GetFieldGuideRed());
+            RedDotController.Instance.SetComRedDot(_btnHaoYou, RedDotDataManager.Instance.GetFriendRed());
         }
 
         private void CheckGuide(object param)

+ 7 - 1
GameClient/Assets/Game/HotUpdate/Views/MainUI/RoleInfoView.cs

@@ -27,12 +27,14 @@ namespace GFGGame
             this.modal = true;
 
             _ui.m_txtVersion.text = GameGlobal.version;
+            _ui.m_txtSlogan.maxLength = GlobalCfgArray.globalCfg.maxSloganWordsCount;
 
             _ui.m_btnExit.onClick.Add(OnClickBtnExit);
             _ui.m_btnLogout.onClick.Add(OnClickBtnLogout);
             _ui.m_btnSound.onClick.Add(OnClickBtnSound);
             _ui.m_btnMusic.onClick.Add(OnClickBtnMusic);
             _ui.m_btnHelp.onClick.Add(OnClickBtnHelp);
+            _ui.m_txtSlogan.onFocusOut.Add(OnFocuseOut);
 
         }
 
@@ -53,7 +55,7 @@ namespace GFGGame
             }
             _ui.m_btnSound.selected = SoundManager.Instance.isOn;
             _ui.m_btnMusic.selected = MusicManager.Instance.isOn;
-
+            _ui.m_txtSlogan.text = RoleDataManager.slogan;
         }
 
         protected override void OnHide()
@@ -105,5 +107,9 @@ namespace GFGGame
             }
         }
 
+        private async void OnFocuseOut()
+        {
+            _ui.m_txtSlogan.text = await RoleInfoSProxy.ReqModifySlogan(_ui.m_txtSlogan.text);
+        }
     }
 }

部分文件因文件數量過多而無法顯示