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
}