// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2021-12-09 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using F; using F.Network; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace G { /// /// 邀请 /// public class InviteProxy : F.GameProxy { public class FriendInfo { public string userId; public string nickName; public string avatarUrl; public int inviteTimestamp; } #region Field private int _obInviteCount; #endregion #region Property /// /// /// public int inviteCount => _obInviteCount; public ActivityInfo inviteActivty => ActivityProxy.Instance.GetActivity(701); public readonly List friendInfos = new List(); #endregion #region Method #endregion #region Invite public void InviteShare(Callback2 callback) { var inviteInfo = new KPlatform.InviteInfo { type = "invite1", userId = UserProxy.UserId }; ShareProxy.Instance.ShareAppWithInvite(inviteInfo.ToString()); } public void GetInviteCount(Callback2 callback) { ServerProxy.Instance.GetInviteCount(callback); } public void GetInviteList(Callback2 callback) { ServerProxy.Instance.GetInviteList(callback); } public void GetRewards(ActivityInfo activityInfo, Callback2 callback) { var activity = inviteActivty; if (activity != null) { if (activity.status == 0) { bool completed = true; foreach (var subInfo in activity.subInfos) { if (subInfo.status == 0) { completed = false; break; } } if (completed) activity.status = 1; } if (activity.status == 1) { activity.status = 2; ActivityProxy.Instance.SaveActivity(activity); RewardProxy.Instance.GetRewardsWithUI(activity.rewardInfos, callback); } else if (activity.status == 0) callback?.Invoke(1, "未完成"); else callback?.Invoke(2, "已领取"); } } public void GetRewards(ActivitySubInfo subInfo, Callback2 callback) { var activity = inviteActivty; if (activity != null) { if (subInfo.status == 1) { subInfo.status = 2; ActivityProxy.Instance.SaveActivity(activity); RewardProxy.Instance.GetRewardsWithUI(subInfo.rewardInfos, callback); } else if (subInfo.status == 0) callback?.Invoke(1, $"还需邀请{subInfo.maxValue - subInfo.curValue}人"); else callback?.Invoke(2, "已领取"); } } public void UpdateActivty() { var activtyInfo = this.inviteActivty; if (activtyInfo == null) return; var subInfos = activtyInfo.subInfos; foreach (var subInfo in subInfos) { if (subInfo.status == 0) { subInfo.curValue = _obInviteCount; if (subInfo.curValue >= subInfo.maxValue) { subInfo.status = 1; //foreach (var subInfo2 in subInfos) //{ // if (subInfo2.status == 2) // subInfo2.status = 1; //} break; } } } activtyInfo.curValue = 0; if (activtyInfo.status == 0) { foreach (var subInfo in subInfos) { if (subInfo.status > 0) { activtyInfo.curValue += 1; } } } else { activtyInfo.curValue = activtyInfo.maxValue; } ActivityProxy.Instance.SaveActivity(activtyInfo); } #endregion #region Unity && Proxy /// /// /// public static InviteProxy Instance => GetInstance(); /// /// /// public override void InitCompleted() { KFramework.GameFacade.RegisterResp(GlobalDefine.PACKET_ID_GET_INVITE_COUNT, this); } public override void ReadArchive() { } public override void Recv(IPacket packet) { var gp = packet as GamePacket; if (gp.error != GamePacket.ERROR_CODE_OK) { PostNotification(GlobalDefine.EVENT_SHOW_TOAST, gp.data as string); return; } if (gp.id == GlobalDefine.PACKET_ID_GET_INVITE_LIST) { friendInfos.Clear(); IList inviteList = gp.data as IList; if (inviteList != null) { for (int i = 0; i < inviteList.Count; i++) { var dict = inviteList.GetDictionary(i); if (dict != null) friendInfos.Add(new FriendInfo { userId = dict.GetString("userid"), nickName = dict.GetString("nickname"), avatarUrl = dict.GetString("avatar"), inviteTimestamp = dict.GetInt("invit_time"), }); } } } else { #if UNITY_EDITOR _obInviteCount += 1; #else _obInviteCount = (int)packet.data; #endif UpdateActivty(); Debug.Log("InviteCount" + _obInviteCount); } } #endregion } }