FriendPanel.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Xml;
  5. using Sfs2X.Util;
  6. using UnityEngine;
  7. using UnityEngine.UI;
  8. public class FriendPanel : Regist
  9. {
  10. #region Config
  11. public static Text NicknameTitle;
  12. public static Text ContentTitle;
  13. public static Text CloseButtonTitle;
  14. public static Text ApplicantTitle;
  15. public static Text PanelTitle;
  16. public static Text AcceptAllButtonTitle;
  17. public static Text AddFriendTitle;
  18. public static Text FriendAmountText;
  19. public static Text GardenNewMessageText;
  20. public static Image GardenNewMessageImage;
  21. public static Text PanelNewApplicantText;
  22. public static Image PanelNewApplicantImage;
  23. public static Image NewApplicantFlagImage;
  24. public static Button OpenPanelButton;
  25. public static Button AcceptAllButton;
  26. public static Button AddFriendButton;
  27. public static Button CloseButton;
  28. public static Toggle ApplicantButton;
  29. public static Transform OpenPanelButtonParent;
  30. public static Transform FriendGrid;
  31. public static Transform ApplicantGrid;
  32. public static Transform FriendPanelParentMask;
  33. public static Transform FriendPanelMask;
  34. public static CanvasGroup PanelParentCanvasGroup;
  35. public static VirtualScrollRectPlus FriendScrollRect;
  36. public static VirtualScrollRectPlus ApplicantScrollRect;
  37. private static float RefreshApplicantTime = 15f;
  38. private static float RefreshApplicantTimer = RefreshApplicantTime;
  39. public static List<ApplicantItem> ApplicantItems = new List<ApplicantItem>();
  40. public static List<AccountData> ApplicantAccountDatas = new List<AccountData>();
  41. public static int MaxFriend
  42. {
  43. get { return maxFriend; }
  44. set
  45. {
  46. maxFriend = value;
  47. UpdateFriendAmountText();
  48. }
  49. }
  50. public static int maxFriend = 25;
  51. private static float RefreshFriendTime = 15f;
  52. private static float RefreshFriendTimer;
  53. public static List<FriendItem> FriendItems = new List<FriendItem>();
  54. public static List<AccountData> FriendAccountDatas = new List<AccountData>();
  55. private static float RefreshPrivateMessageTime = 15f;
  56. private static float RefreshPrivateMessageTimer;
  57. public static bool HaveNewApplicant;
  58. public static bool HaveNewPrivateMessage
  59. {
  60. get
  61. {
  62. foreach (var friendItem in FriendItems)
  63. {
  64. if (HaveNewMessage(friendItem.AccountData.SerialNumber))
  65. {
  66. return true;
  67. }
  68. }
  69. return false;
  70. }
  71. }
  72. public static TweenOutline OpenPanelButtonOutlineTween;
  73. public static int ActivateLevel = TutorialManager.VisitTutorialLevel;
  74. public static Action<List<AccountData>> OnFriendListRefresh;
  75. #endregion
  76. public override void ThirdInit()
  77. {
  78. RefreshFriendList();
  79. }
  80. public override void RegistReference()
  81. {
  82. NicknameTitle = ResourceManager.Get<Text>(CanvasLabel.AF_NicknameTitle);
  83. ContentTitle = ResourceManager.Get<Text>(CanvasLabel.AF_ContentTitle);
  84. CloseButtonTitle = ResourceManager.Get<Text>(CanvasLabel.AF_CloseButtonTitle);
  85. ApplicantTitle = ResourceManager.Get<Text>(CanvasLabel.AF_ApplicantTitle);
  86. PanelTitle = ResourceManager.Get<Text>(CanvasLabel.AF_PanelTitle);
  87. AcceptAllButtonTitle = ResourceManager.Get<Text>(CanvasLabel.AF_AcceptAllButtonTitle);
  88. AddFriendTitle = ResourceManager.Get<Text>(CanvasLabel.AF_AddFriendTitle);
  89. FriendAmountText = ResourceManager.Get<Text>(CanvasLabel.AF_FriendAmountText);
  90. GardenNewMessageText = ResourceManager.Get<Text>(CanvasLabel.C_NewMessageFlagText);
  91. GardenNewMessageImage = ResourceManager.Get<Image>(CanvasLabel.C_NewMessageFlag);
  92. PanelNewApplicantText = ResourceManager.Get<Text>(CanvasLabel.AF_NewMessageFlagText);
  93. PanelNewApplicantImage = ResourceManager.Get<Image>(CanvasLabel.AF_NewMessageFlag);
  94. NewApplicantFlagImage = ResourceManager.Get<Image>(CanvasLabel.AF_NewApplicantFlagImage);
  95. AcceptAllButton = ResourceManager.Get<Button>(CanvasLabel.AF_AcceptAllButton);
  96. AddFriendButton = ResourceManager.Get<Button>(CanvasLabel.AF_AddFriendButton);
  97. CloseButton = ResourceManager.Get<Button>(CanvasLabel.AF_CloseButton);
  98. ApplicantButton = ResourceManager.Get<Toggle>(CanvasLabel.AF_ApplicantButton);
  99. OpenPanelButton = ResourceManager.Get<Button>(CanvasLabel.C_FriendButton);
  100. OpenPanelButtonParent = ResourceManager.Get(CanvasLabel.C_FriendButtonParent);
  101. FriendGrid = ResourceManager.Get(CanvasLabel.AF_FriendGrid);
  102. ApplicantGrid = ResourceManager.Get(CanvasLabel.AF_ApplicantGrid);
  103. FriendPanelParentMask = ResourceManager.Get(CanvasLabel.AF_FriendPanelParent);
  104. FriendPanelMask = ResourceManager.Get(CanvasLabel.AF_FriendPanelMask);
  105. PanelParentCanvasGroup = ResourceManager.Get<CanvasGroup>(CanvasLabel.AF_FriendPanelParent);
  106. FriendScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(CanvasLabel.AF_FriendScrollRect);
  107. ApplicantScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(CanvasLabel.AF_ApplicantScrollRect);
  108. LanguageManager.Add(NicknameTitle, new MulLanStr(LanguageLabel.UI__AF_NicknameTitle));
  109. LanguageManager.Add(ContentTitle, new MulLanStr(LanguageLabel.UI__AF_ContentTitle));
  110. LanguageManager.Add(CloseButtonTitle, new MulLanStr(LanguageLabel.UI__AF_CloseButtonTitle));
  111. LanguageManager.Add(ApplicantTitle, new MulLanStr(LanguageLabel.UI__AF_ApplicantTitle));
  112. LanguageManager.Add(PanelTitle, new MulLanStr(LanguageLabel.UI__AF_PanelTitle));
  113. LanguageManager.Add(AcceptAllButtonTitle, new MulLanStr(LanguageLabel.UI__AF_AcceptAllButtonTitle));
  114. LanguageManager.Add(AddFriendTitle, new MulLanStr(LanguageLabel.UI__AF_AddFriendTitle));
  115. LanguageManager.Add(PanelNewApplicantText, new MulLanStr(LanguageLabel.UI__AH_NewApplicant));
  116. LanguageManager.Add(GardenNewMessageText, new MulLanStr(LanguageLabel.UI__AH_NewMessage));
  117. OpenPanelButton.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
  118. FriendPanelParentMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
  119. FriendPanelMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
  120. OpenPanelButtonOutlineTween = OpenPanelButton.CreateTweenOutline(0, 201/255f, 1f, true, true, Curve.EaseOutQuad);
  121. OpenPanelButtonOutlineTween.PingPong = true;
  122. OpenPanelButtonOutlineTween.IgnoreActiveControll = true;
  123. OpenPanelButton.onClick.AddListener(OpenRootFriendPanel);
  124. CloseButton.onClick.AddListener(CloseRootFriendPanel);
  125. ApplicantButton.onValueChanged.AddListener(OnApplicantToggleClick);
  126. AddFriendButton.onClick.AddListener(OnAddFriendButtonClick);
  127. AcceptAllButton.onClick.AddListener(OnAcceptAllButtonClick);
  128. Manager.OnLevelChange += level =>
  129. {
  130. if (level >= ActivateLevel)
  131. {
  132. OpenPanelButton.TweenForCG();
  133. OpenPanelButtonParent.SetActive(true);
  134. }
  135. };
  136. MessagePanel.OnHaveNewMessage += SortFriendItems;
  137. VisitManager.OnEnterVisteeGarden += OnEnterVisiteeGarden;
  138. VisitManager.OnExitVisteeGarden += OnExitVisiteeGarden;
  139. HttpManager.OnConnect += OnConnect;
  140. }
  141. private void Update()
  142. {
  143. RefreshApplicantTimer += Time.deltaTime;
  144. if (RefreshApplicantTimer >= RefreshApplicantTime)
  145. {
  146. RefreshApplicantTimer = 0;
  147. RefreshApplicant();
  148. }
  149. RefreshFriendTimer += Time.deltaTime;
  150. if (RefreshFriendTimer >= RefreshFriendTime)
  151. {
  152. RefreshFriendTimer = 0;
  153. RefreshFriendList();
  154. }
  155. RefreshPrivateMessageTimer += Time.deltaTime;
  156. if (RefreshPrivateMessageTimer >= RefreshPrivateMessageTime)
  157. {
  158. RefreshPrivateMessageTimer = 0;
  159. //RefreshPrivateMessage();
  160. }
  161. }
  162. public static void PlayFriendButtonOutline()
  163. {
  164. if (!OpenPanelButtonOutlineTween.IsPlaying)
  165. {
  166. OpenPanelButtonOutlineTween.PingPong = true;
  167. OpenPanelButtonOutlineTween.StartForward();
  168. }
  169. }
  170. public static void StopFriendButtonOutline()
  171. {
  172. if (OpenPanelButtonOutlineTween.IsPlaying)
  173. {
  174. OpenPanelButtonOutlineTween.PingPong = false;
  175. OpenPanelButtonOutlineTween.StartBackward();
  176. }
  177. }
  178. public static void UpdateFriendButtonOutlineStatus()
  179. {
  180. if (HaveNewPrivateMessage)
  181. {
  182. GardenNewMessageImage.SetActive(true);
  183. }
  184. else
  185. {
  186. GardenNewMessageImage.SetActive(false);
  187. }
  188. if (HaveNewApplicant)
  189. {
  190. PanelNewApplicantImage.SetActive(true);
  191. }
  192. else
  193. {
  194. PanelNewApplicantImage.SetActive(false);
  195. }
  196. if (HaveNewApplicant || HaveNewPrivateMessage)
  197. {
  198. PlayFriendButtonOutline();
  199. }
  200. else if (!HaveNewApplicant && !HaveNewPrivateMessage)
  201. {
  202. StopFriendButtonOutline();
  203. }
  204. }
  205. public static void AddFriendItem(AccountData accountData)
  206. {
  207. FriendItem item = ResourceManager.Get(FriendItemLabel.FriendItem, Folder.UI, false, ApplicantScrollRect.content, false, ObjType.FriendItem, typeof(FriendItem)).GetComponent<FriendItem>();
  208. item.Init();
  209. item.Reset(accountData);
  210. item.SetParent(FriendScrollRect.content);
  211. FriendItems.Add(item);
  212. FriendAccountDatas.Add(accountData);
  213. UpdateFriendAmountText();
  214. }
  215. public static void SaveFriendItem(FriendItem item)
  216. {
  217. ResourceManager.Save(item);
  218. FriendItems.Remove(item);
  219. FriendAccountDatas.Remove(item.AccountData);
  220. UpdateFriendAmountText();
  221. }
  222. public static void UpdateFriendAmountText()
  223. {
  224. FriendAmountText.text = string.Format("{0}/{1}", FriendItems.Count, maxFriend);
  225. }
  226. public static void RefreshFriendList()
  227. {
  228. HttpManager.GetBuddyList(RefreshFriendListCallback, () => {});
  229. }
  230. private static void RefreshFriendListCallback(List<AccountData> accountDatas)
  231. {
  232. for (int i = 0; i < FriendItems.Count; i++)
  233. {
  234. SaveFriendItem(FriendItems[i--]);
  235. }
  236. foreach (var accountData in accountDatas)
  237. {
  238. AddFriendItem(accountData);
  239. }
  240. FriendAccountDatas = accountDatas;
  241. if (OnFriendListRefresh != null)
  242. {
  243. OnFriendListRefresh.Invoke(accountDatas);
  244. }
  245. SortFriendItems(null);
  246. RefreshPrivateMessage();
  247. }
  248. public static void SortFriendItems(string targetSerialNumber)
  249. {
  250. FriendItem friendItem = null;
  251. List<FriendItem> haveNewPrivateMessageItems = new List<FriendItem>();
  252. List<FriendItem> dontHaveNewPrivateMessageItems = new List<FriendItem>();
  253. foreach (var item in FriendItems)
  254. {
  255. if (item.AccountData.SerialNumber == targetSerialNumber)
  256. {
  257. friendItem = item;
  258. }
  259. else if (HaveNewMessage(item.AccountData.SerialNumber))
  260. {
  261. haveNewPrivateMessageItems.Add(item);
  262. }
  263. else
  264. {
  265. dontHaveNewPrivateMessageItems.Add(item);
  266. }
  267. }
  268. haveNewPrivateMessageItems.MySort((item0, item1) => item0.AccountData.LastLoginDate.Ticks < item1.AccountData.LastLoginDate.Ticks);
  269. dontHaveNewPrivateMessageItems.MySort((item0, item1) => item0.AccountData.LastLoginDate.Ticks < item1.AccountData.LastLoginDate.Ticks);
  270. List<FriendItem> friendItems = new List<FriendItem>();
  271. friendItems.AddRange(haveNewPrivateMessageItems);
  272. friendItems.AddRange(dontHaveNewPrivateMessageItems);
  273. for (int i = 0; i < friendItems.Count; i++)
  274. {
  275. friendItems[i].transform.SetSiblingIndex(i);
  276. }
  277. if (friendItem != null)
  278. {
  279. friendItem.transform.SetAsFirstSibling();
  280. }
  281. }
  282. public static void AddApplicantItem(AccountData accountData)
  283. {
  284. ApplicantItem item = ResourceManager.Get(ApplicantItemLabel.ApplicantItem, Folder.UI, false, ApplicantScrollRect.content, false, ObjType.ApplicantItem, typeof(ApplicantItem)).GetComponent<ApplicantItem>();
  285. item.Init();
  286. item.Reset(accountData);
  287. ApplicantItems.Add(item);
  288. ApplicantAccountDatas.Add(accountData);
  289. }
  290. public static void SaveApplicantItem(ApplicantItem item)
  291. {
  292. ResourceManager.Save(item);
  293. ApplicantItems.Remove(item);
  294. ApplicantAccountDatas.Remove(item.AccountData);
  295. if (ApplicantItems.Count == 0)
  296. {
  297. OnDontHaveApplicant();
  298. }
  299. SaveLastApplicantSerialNumber();
  300. SetNewApplicantStatus();
  301. }
  302. private static void RefreshApplicant()
  303. {
  304. HttpManager.GetApplicantList(RefreshApplicantCallback, () => { });
  305. }
  306. private static void RefreshApplicantCallback(List<AccountData> accountDatas)
  307. {
  308. for (int i = 0; i < ApplicantItems.Count; i++)
  309. {
  310. SaveApplicantItem(ApplicantItems[i--]);
  311. }
  312. for (int i = 0; i < accountDatas.Count; i++)
  313. {
  314. AddApplicantItem(accountDatas[i]);
  315. }
  316. ApplicantAccountDatas = accountDatas;
  317. if (ApplicantItems.Count > 0)
  318. {
  319. OnHaveApplicant();
  320. }
  321. else
  322. {
  323. OnDontHaveApplicant();
  324. }
  325. SetNewApplicantStatus();
  326. }
  327. private static void OnHaveApplicant()
  328. {
  329. AcceptAllButton.image.material = null;
  330. AcceptAllButton.interactable = true;
  331. }
  332. private static void OnDontHaveApplicant()
  333. {
  334. AcceptAllButton.image.material = Lib.GrayMat;
  335. AcceptAllButton.interactable = false;
  336. }
  337. private static void SetNewApplicantStatus()
  338. {
  339. string lastApplicantSerialNumber = ConfigManager.GetStringFormConfig(PlayerConfigLabel.LastApplicantSerialNumber);
  340. if (ApplicantItems.Count == 0 || ApplicantItems.Back(0).AccountData.SerialNumber == lastApplicantSerialNumber)
  341. {
  342. NewApplicantFlagImage.SetActive(false);
  343. HaveNewApplicant = false;
  344. }
  345. else
  346. {
  347. NewApplicantFlagImage.SetActive(true);
  348. HaveNewApplicant = true;
  349. }
  350. UpdateFriendButtonOutlineStatus();
  351. }
  352. public static void SaveLastApplicantSerialNumber()
  353. {
  354. if (ApplicantItems.Count > 0)
  355. {
  356. ConfigManager.SaveStringToConfig(PlayerConfigLabel.LastApplicantSerialNumber, ApplicantItems.Back(0).AccountData.SerialNumber);
  357. }
  358. }
  359. private static void RefreshPrivateMessage()
  360. {
  361. foreach (var friendAccountData in FriendAccountDatas)
  362. {
  363. HttpManager.GetPrivateMessage(friendAccountData.SerialNumber, "0", MessagePanel.RefreshPrivateMessageSucceedCallback, MessagePanel.RefreshPrivateMessageFailedCallback);
  364. }
  365. }
  366. public static void OpenRootFriendPanel()
  367. {
  368. FriendPanelParentMask.TweenForCG();
  369. ApplicantButton.isOn = false;
  370. AfterApplicantToggleClick(false);
  371. }
  372. public static void CloseRootFriendPanel()
  373. {
  374. AudioManager.PlayClip(ResourceLabel.CloseClip);
  375. FriendPanelParentMask.TweenBacCG();
  376. }
  377. public static void OpenFriendPanel()
  378. {
  379. AudioManager.PlayClip(ResourceLabel.BtnClip);
  380. FriendPanelMask.TweenForCG();
  381. }
  382. public static void CloseFriendPanel()
  383. {
  384. AudioManager.PlayClip(ResourceLabel.CloseClip);
  385. FriendPanelMask.TweenBacCG();
  386. }
  387. private static void OnApplicantToggleClick(bool value)
  388. {
  389. AudioManager.PlayClip(ResourceLabel.BtnClip);
  390. AfterApplicantToggleClick(value);
  391. }
  392. private static void AfterApplicantToggleClick(bool value)
  393. {
  394. if (value)
  395. {
  396. ResourceManager.Get(CanvasLabel.AF_ApplicantIcon).SetActive(true);
  397. SaveLastApplicantSerialNumber();
  398. SetNewApplicantStatus();
  399. SaveLastApplicantSerialNumber();
  400. AcceptAllButton.SetActive(true);
  401. AddFriendButton.SetActive(false);
  402. ApplicantScrollRect.SetActive(true);
  403. FriendScrollRect.SetActive(false);
  404. }
  405. else
  406. {
  407. ResourceManager.Get(CanvasLabel.AF_ApplicantIcon).SetActive(false);
  408. AcceptAllButton.SetActive(false);
  409. AddFriendButton.SetActive(true);
  410. ApplicantScrollRect.SetActive(false);
  411. FriendScrollRect.SetActive(true);
  412. }
  413. }
  414. private static void OnAddFriendButtonClick()
  415. {
  416. AudioManager.PlayClip(ResourceLabel.BtnClip);
  417. AddFriendPanel.OpenPanel();
  418. }
  419. private static void OnAcceptAllButtonClick()
  420. {
  421. AudioManager.PlayClip(ResourceLabel.BtnClip);
  422. foreach (var applicantItem in ApplicantItems)
  423. {
  424. applicantItem.OnAcceptButtonClick();
  425. }
  426. }
  427. public static bool IsFriendFull(bool showBubble)
  428. {
  429. if (FriendItems.Count >= MaxFriend)
  430. {
  431. if (showBubble)
  432. {
  433. Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__FriendFullSelf));
  434. }
  435. return true;
  436. }
  437. else
  438. {
  439. return false;
  440. }
  441. }
  442. public static bool IsPrivateMessageNew(string targetSerialNumber, DateTime dateTime)
  443. {
  444. XmlNodeList nodes = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate).SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
  445. for (int i = 0; i < nodes.Count; i++)
  446. {
  447. string[] strings = nodes[i].Attributes[0].Value.Split('|');
  448. string serialNumber = strings[0];
  449. DateTime lastDateTime = DateTime.Parse(strings[1]);
  450. //Debug.Log(dateTime + " " + lastDateTime);
  451. //Debug.Log(targetSerialNumber == serialNumber && dateTime == lastDateTime);
  452. if (targetSerialNumber == serialNumber && dateTime == lastDateTime)
  453. {
  454. return false;
  455. }
  456. }
  457. return true;
  458. }
  459. public static bool HaveNewMessage(string targetSerialNumber)
  460. {
  461. if (MessagePanel.PrivateMessageDataDictionary.ContainsKey(targetSerialNumber))
  462. {
  463. PrivateMessageDataStash dataStash = MessagePanel.PrivateMessageDataDictionary[targetSerialNumber];
  464. if (dataStash.PrivateMessageDatas.Count > 0)
  465. {
  466. return IsPrivateMessageNew(targetSerialNumber, dataStash.PrivateMessageDatas[0].Date);
  467. }
  468. else
  469. {
  470. return false;
  471. }
  472. }
  473. else
  474. {
  475. return false;
  476. }
  477. }
  478. public static void SaveLastPrivateMessageDate(string targetSerialNumber, DateTime dateTime)
  479. {
  480. XmlNode parentNode = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate);
  481. XmlNodeList nodes = parentNode.SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
  482. for (int i = 0; i < nodes.Count; i++)
  483. {
  484. string[] strings = nodes[i].Attributes[0].Value.Split('|');
  485. string serialNumber = strings[0];
  486. if (targetSerialNumber == serialNumber)
  487. {
  488. nodes[i].Attributes[0].Value = string.Format("{0}|{1}", targetSerialNumber, dateTime);
  489. //ConfigManager.SaveConfigDocument();
  490. return;
  491. }
  492. }
  493. XmlNode node = ConfigManager.ConfigDocument.CreateNode(XmlNodeType.Element, PlayerConfigLabel.LastPrivateMessageDate, null);
  494. XmlAttribute attribute = node.Attributes.Append(ConfigManager.ConfigDocument.CreateAttribute(PlayerConfigLabel.AttributeName));
  495. attribute.Value = string.Format("{0}|{1}", targetSerialNumber, dateTime);
  496. parentNode.AppendChild(node);
  497. //ConfigManager.SaveConfigDocument();
  498. }
  499. public static void DeleteLastPrivateMessageDate(string targetSerialNumber)
  500. {
  501. XmlNode parentNode = ConfigManager.ConfigRootNode.SelectSingleNode(PlayerConfigLabel.LastPrivateMessageDate);
  502. XmlNodeList nodes = parentNode.SelectNodes(PlayerConfigLabel.LastPrivateMessageDate);
  503. for (int i = 0; i < nodes.Count; i++)
  504. {
  505. string[] strings = nodes[i].Attributes[0].Value.Split('|');
  506. string serialNumber = strings[0];
  507. if (targetSerialNumber == serialNumber)
  508. {
  509. parentNode.RemoveChild(nodes[i]);
  510. return;
  511. }
  512. }
  513. }
  514. public static void OnConnect()
  515. {
  516. MaxFriend = HttpManager.MaxFriend;
  517. }
  518. public static void OnEnterVisiteeGarden()
  519. {
  520. OpenPanelButtonParent.SetActive(false);
  521. }
  522. public static void OnExitVisiteeGarden()
  523. {
  524. OpenPanelButtonParent.SetActive(true);
  525. }
  526. public static bool IsFriend(string serialNumber)
  527. {
  528. if (FriendAccountDatas.MyContains(data => data.SerialNumber == serialNumber))
  529. {
  530. return true;
  531. }
  532. else
  533. {
  534. return false;
  535. }
  536. }
  537. }