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