using System; using System.Collections.Generic; /// /// 排行榜模块 /// public class RankProxy : ProxyBase { public RankProxy() => this.opeCode = OpeCode.ope_rank; #region 战斗力榜 /// /// [6601] 战力榜主界面 /// /// /// 页码id,每页10条数据 /// public void GetFightPowerRank(int pageId, Action callback) { Post(CmdCode.rank_fpower_getRank, new object[] { pageId }, resp => { var ret = new PowerRankMainInfo(); ret.RankInfo = resp.result["rankInfo"].ToObject>(); GetRankingOfFightPower((i, p) => { // 再查一下个人的排名 ret.RankingOfPlayer = i; ret.PowerOfPlayer = p; callback?.Invoke(ret); }); }); } /// /// [6602] 领取战力榜全服奖励 /// /// 领取的战斗力档次 /// public void DrawFightPowerRankReward(int rewardCondition, Action callback) { Post(CmdCode.rank_fpower_drawReward, new object[] { rewardCondition }, resp => { // 同步发放奖励数据 UserProxy.Instance.player.putItemToStore(GameConfigData.Ins.Getrankreward_fpowerMo(rewardCondition).reward); UserProxy.Instance.player.PrivateState.RankFpowerRewardRec.Add(rewardCondition); callback?.Invoke(); }); } /// /// [6603] 查询玩家的战斗力全服排名. /// /// 排名、战斗力,返回值凡是大于100的按照未上榜处理 public void GetRankingOfFightPower(Action callbakc) { Post(CmdCode.rank_fpower_getRanking, new object[] { }, resp => { callbakc?.Invoke(resp.result["ranking"].ToObject(), // 排名 resp.result["power"].ToObject()); // 战斗力 }); } /// /// [6604] 查询三榜榜一信息 /// /// int值 public void RankGetAllTop1(Action callback) { Post(CmdCode.rank_T_getTop1, new object[] { }, resp => callback?.Invoke(resp.result.ToObject())); } /// /// [6605] 通关榜主界面---玩家等级排行榜玩家信息 /// /// /// 页码id,每页10条数据 /// public void GetPassGateRank(int pageId, Action callback) { Post(CmdCode.rank_passgate_getRank, new object[] { pageId }, resp => { var ret = new PassgateRankMainInfo(); ret.RankInfo = resp.result["rankInfo"].ToObject>(); ret.RankingOfPlayer = resp.result["ranking"].ToObject(); ret.Score = resp.result["score"].ToObject(); callback?.Invoke(ret); }); } /// /// [6606] 领取通关榜全服奖励 /// /// 领取的关卡ID /// public void DrawPassGateRankReward(int rewardCondition, Action callback) { Post(CmdCode.rank_passgate_drawReward, new object[] { rewardCondition }, resp => { // 同步发放奖励数据 //UserProxy.Instance.player.putItemToStore(GameConfigData.Ins.Getrankreward_passgateMo(rewardCondition).reward); UserProxy.Instance.player.putItemToStore(GameConfigData.Ins.Getrank_playerlevel_rewardMo(rewardCondition).reward); UserProxy.Instance.player.PrivateState.RankPassGateRewardRec.Add(rewardCondition); callback?.Invoke(); }); } /// /// 6607 查询战力榜突破记录 /// /// public void GetFpowerBreakLog(Action> callback) { Post(CmdCode.rank_fpower_breaklog, new object[] { }, resp => callback?.Invoke(resp.result.ToObject>())); } /// /// 6608 查询通关榜突破记录 /// /// public void GetPassgateBreakLog(Action> callback) { Post(CmdCode.rank_passgate_breaklog, new object[] { }, resp => callback?.Invoke(resp.result.ToObject>())); } #endregion #region 数据结构内嵌类 /// /// 战斗力榜主界面信息 /// public class PowerRankMainInfo { /// /// 榜单 /// public List RankInfo; /// /// 玩家排行(>100) 请一律按未上榜处理 /// public int RankingOfPlayer; /// /// 玩家战力 /// public int PowerOfPlayer; } /// /// 排行榜玩家信息 /// public class UserRankInfo { /// /// 玩家uid /// public string uid; /// /// 等级 /// public int level; /// /// 积分 /// public long score; /// /// 昵称 /// public string name; /// /// 头像 /// public string headImg; /// /// 战斗力----等级 /// /// public int Power() => (int)score; /// /// 最大通关id /// /// public int maxGateId() => (int)(score / MaxUserCount); /// /// 关卡名称 /// /// public string GateName() => sm_gate.GetMoById(maxGateId())?.name() ?? "未挑战"; } /// /// 战斗力全服突破奖励界面 /// public class UI_PowerReward { /// /// 关闭创建实例功能 /// private UI_PowerReward() { } static public void GetInst(Action callback) { var inst = new UI_PowerReward(); Instance.GetFpowerBreakLog(dic => { foreach (var kv in GameConfigData.Ins.rankreward_fpower) { if (dic.ContainsKey(kv.Key)) { inst.li.Add(new FpowerRewardInfoItem(kv.Key, dic[kv.Key])); } else { inst.li.Add(new FpowerRewardInfoItem(kv.Key, null)); } } callback?.Invoke(inst); }); } /// /// 奖励信息列表 /// public readonly List li = new List(); } /// /// 通关榜全服突破奖励界面 /// public class UI_PassgageReward { /// /// 关闭创建实例功能 /// private UI_PassgageReward() { } static public void GetInst(Action callback) { var inst = new UI_PassgageReward(); Instance.GetPassgateBreakLog(dic => { //foreach (var kv in GameConfigData.Ins.rankreward_passgate) //{ // if (dic.ContainsKey(kv.Key)) // { // inst.li.Add(new PassGateRewardInfoItem(kv.Key, dic[kv.Key])); // } // else // { // inst.li.Add(new PassGateRewardInfoItem(kv.Key, null)); // } //} foreach (var kv in GameConfigData.Ins.rank_playerlevel_reward) { if (dic.ContainsKey(kv.Key)) { inst.li.Add(new PassGateRewardInfoItem(kv.Key, dic[kv.Key])); } else { inst.li.Add(new PassGateRewardInfoItem(kv.Key, null)); } } callback?.Invoke(inst); }); } /// /// 奖励信息列表 /// public readonly List li = new List(); } /// /// 战斗力奖励信息 /// public class FpowerRewardInfoItem : RewardInfoItem { public FpowerRewardInfoItem(int _condition, UserRankInfo player) : base(_condition, player) { } /// /// 奖励状态 -1: 未达成, 0 可领取, 1 已领取 /// public override int RewardState { get { if (UserProxy.Instance.player.PrivateState.RankFpowerRewardRec.Contains(condition)) { return 1; } if (null != FirstBreachPlayer) { return 0; } return -1; } } /// /// 配置数据 /// public override IRankReward Mo { get { return sm_rankreward_fpower.GetMoById(condition); } } } /// /// PassGate奖励信息 /// public class PassGateRewardInfoItem : RewardInfoItem { public PassGateRewardInfoItem(int _condition, UserRankInfo player) : base(_condition, player) { } /// /// 奖励状态 -1: 未达成, 0 可领取, 1 已领取 /// public override int RewardState { get { if (UserProxy.Instance.player.PrivateState.RankPassGateRewardRec.Contains(condition)) { return 1; } if (null != FirstBreachPlayer) { return 0; } return -1; } } /// /// 配置数据 /// //public override IRankReward Mo { get { return sm_rankreward_passgate.GetMoById(condition); } } public override IRankReward Mo { get { return GameConfigData.Ins.Getrank_playerlevel_rewardMo(condition); } } } /// /// 奖励信息 /// public class RewardInfoItem { public RewardInfoItem(int _condition, UserRankInfo player) { this.condition = _condition; this.FirstBreachPlayer = player; } /// /// 达成条件(数值) /// public readonly int condition; /// /// 首位达成玩家 /// public readonly UserRankInfo FirstBreachPlayer; /// /// 奖励状态 -1: 未达成, 0 可领取, 1 已领取 /// public virtual int RewardState { get; } /// /// 文本描述 /// public string Description => Mo.desc; /// /// 奖励字符串 /// public string rewardStr => Mo.reward; /// /// 配置数据 /// public virtual IRankReward Mo { get; } } /// /// 三榜榜一信息 /// public class ThreeTop1Info { /// /// 战力榜 /// public UserRankInfo FightPower; /// /// 通关榜 /// public UserRankInfo PassGate; /// /// 言灵积分榜 /// public UserRankInfo Yanling; } /// /// 通关榜主界面信息 /// public class PassgateRankMainInfo { /// /// 榜单 /// public List RankInfo; /// /// 玩家排行(>100) 请一律按未上榜处理 /// public int RankingOfPlayer; /// /// 玩家通关记录 (gateid+999999) /// public long Score; /// /// 玩家的通过的最大关卡id /// /// public int MaxGateId() => (int)(Score / MaxUserCount); /// /// 关卡名称 /// /// public string GateName() => sm_gate.GetMoById(MaxGateId())?.name() ?? "未挑战"; } /// /// 假定最大玩家数量不超过100W(前后台硬编码的此值) (gwang) /// public const long MaxUserCount = 1000000; #endregion }