//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, December 12, 2018
|
//--------------------------------------------------------
|
using System;
|
using System.Collections.Generic;
|
using vnxbqy.UI;
|
//跨服PK奖励信息
|
|
public class Item_Class
|
{
|
public int ItemId;
|
public int ItemNumber;
|
public int Isbind;
|
}
|
public class SeasonAwardClass//赛季奖励
|
{
|
public int DanLv;
|
public string Name;
|
public int Score;
|
public List<Item_Class> ItemList;
|
}
|
|
public struct ZoneRankingStruct
|
{
|
public int ZoneID;
|
public int SeasonID;
|
public override bool Equals(object obj)
|
{
|
var compare = (ZoneRankingStruct)obj;
|
|
return this.ZoneID == compare.ZoneID && this.SeasonID == compare.SeasonID;
|
}
|
public override int GetHashCode()
|
{
|
return (ZoneID * 1000 + SeasonID).GetHashCode();
|
}
|
}
|
public class RankingInformationClass//排名信息
|
{
|
public int Rankin;//名次
|
public int Realm;//境界
|
public int PlayerID;//玩家ID
|
public string PlayerName;//玩家名
|
public int Job;//职业
|
public int Face;
|
public int FacePic;
|
public int Power;//战力
|
public int DanLv;//段位
|
public int PkScore;//积分
|
}
|
public enum CrossRealmPKAwardStateEnum
|
{
|
DayPKCountAwardState = 1,
|
DayWinCountAwardState = 2,
|
DanLVAwardState = 3,
|
SeasonAwardState = 4,
|
}
|
|
|
public class CrossServerOneVsOneRewardModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
|
{
|
CrossServerOneVsOneModel crossServerModel { get { return ModelCenter.Instance.GetModel<CrossServerOneVsOneModel>(); } }
|
public Dictionary<int, SeasonAwardClass> SegmentRewardDic = new Dictionary<int, SeasonAwardClass>();//段位奖励
|
public ImpactRankModel.RankAwardItem SeasonRewardDic = new ImpactRankModel.RankAwardItem();//赛季奖励
|
public Dictionary<int, List<Item_Class>> SeasonRewardConfigDic = new Dictionary<int, List<Item_Class>>(); //赛季奖励
|
public Dictionary<ZoneRankingStruct, Dictionary<int, RankingInformationClass>> ZoneRankingDic = new Dictionary<ZoneRankingStruct, Dictionary<int, RankingInformationClass>>();
|
private List<CrossRealmPKDanAwardConfig> CrossRealmPKDanAwardList = new List<CrossRealmPKDanAwardConfig>();
|
public Action CrossRealmPKAwardStateUpdate;//领取奖励刷新
|
public Action RankInformationUpdate;//排行榜刷新
|
private uint DayPKCountAwardState; //每日匹配次数奖励记录
|
private uint DayWinCountAwardState; // 每日胜利次数奖励记录
|
private uint DanLVAwardState; // 段位达标奖励记录
|
private int SeasonAwardState; // 赛季结算奖励是否已领取
|
public int ZoneID = 0;//赛区ID
|
public int SeasonID = 0;//赛季ID
|
public int MyRank = -1;//我的排名
|
private const int Redpoint_key1 = 2130102;//段位奖励红点
|
public Redpoint redPointStre1 = new Redpoint(21301, Redpoint_key1);
|
private const int Redpoint_key2 = 2130103;//赛季奖励红点
|
public Redpoint redPointStre2 = new Redpoint(21301, Redpoint_key2);
|
|
private int MianOpenLV = 0;//跨服按钮开启条件
|
|
public string ZoneName = string.Empty;//赛区名
|
private int currentId = 0;//获取当前赛区ID
|
private string crossZoneName = string.Empty;//赛区编号
|
public override void Init()
|
{
|
|
var config = FuncConfigConfig.Get("CrossServerIcon").Numerical1;
|
MianOpenLV = int.Parse(config);
|
CrossRealmPKDanAwardList = CrossRealmPKDanAwardConfig.GetValues();
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
currentId = 0;
|
crossZoneName = string.Empty;
|
ZoneID = 0;
|
SeasonID = 0;
|
PkDanLvNow = 0;
|
SegmentRewardDic.Clear();
|
SeasonRewardConfigDic.Clear();
|
crossServerModel.UpdatePkResultEvent -= UpdatePkResultEvent;
|
CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent -= UpdatePlayerInfoEvent;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
currentId = 0;
|
crossZoneName = string.Empty;
|
GetSeasonAward();
|
GetSegmentReward();
|
crossServerModel.UpdatePkResultEvent += UpdatePkResultEvent;
|
CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent += UpdatePlayerInfoEvent;
|
GetZoneName();
|
RedPointSeg();
|
RedPointSea();
|
bool isbool = IsAwardState(CrossRealmPKAwardStateEnum.SeasonAwardState, -1);
|
if (CrossServerOneVsOnePKSeason.Instance.SeasonState == 2)
|
{
|
ViewCrossPKBillboard(CrossServerOneVsOnePKSeason.Instance.ZoneID, CrossServerOneVsOnePKSeason.Instance.SeasonID);//关于赛季查询
|
}
|
}
|
|
private void GetZoneName()
|
{
|
for (int i = 0; i < CrossServerOneVsOnePKSeason.Instance.ZoneCount; i++)
|
{
|
if (CrossServerOneVsOnePKSeason.Instance.ZoneIDList[i].ZoneID == CrossServerOneVsOnePKSeason.Instance.ZoneID)
|
{
|
ZoneName = UIHelper.ServerStringTrim(CrossServerOneVsOnePKSeason.Instance.ZoneIDList[i].ZoneName);
|
}
|
|
}
|
|
|
}
|
|
public override void UnInit()
|
{
|
|
}
|
private void UpdatePlayerInfoEvent()
|
{
|
RedPointSeg();
|
RedPointSea();
|
}
|
|
public bool IsShowCrossServerOneVsOne()//是否开启跨服按钮
|
{
|
bool Isbool = false;
|
if (PlayerDatas.Instance.baseData.LV >= MianOpenLV)
|
{
|
Isbool = true;
|
}
|
return Isbool;
|
}
|
|
private void UpdatePkResultEvent()
|
{
|
if (CrossServerUtility.IsCrossServerOneVsOne() )//副本结算界面
|
{
|
if (WindowCenter.Instance.IsOpen<CrossServerOneVsOneRoundWin>())
|
{
|
WindowCenter.Instance.Close<CrossServerOneVsOneRoundWin>();
|
}
|
WindowCenter.Instance.Open<CrossServerSettlementWin>();
|
}
|
}
|
public void GetSeasonAward()//段位奖励数据获取
|
{
|
|
var seasonID = CrossServerOneVsOnePKSeason.Instance.SeasonID;
|
var configPK = CrossRealmPKDanAwardList;
|
var result2 = false;
|
for (int j = 0; j < configPK.Count; j++)
|
{
|
var _config = configPK[j];
|
if (CrossServerOneVsOnePKSeason.Instance.CrossZoneName != null)
|
{
|
bool result = CrossServerOneVsOnePKSeason.Instance.CrossZoneName.Equals(_config.CrossZoneName);
|
if (result)
|
{
|
result2 = true;
|
}
|
}
|
|
}
|
if (CrossServerOneVsOnePKSeason.Instance.CrossZoneName != null && result2)
|
{
|
crossZoneName = CrossServerOneVsOnePKSeason.Instance.CrossZoneName;
|
}
|
if (seasonID == 0)
|
{
|
seasonID += 1;
|
}
|
if (currentId == seasonID && SegmentRewardDic.Count != 0)
|
{
|
return;
|
}
|
|
SegmentRewardDic.Clear();
|
for (int i = 0; i < configPK.Count; i++)
|
{
|
var _config = configPK[i];
|
bool result = crossZoneName.Equals(_config.CrossZoneName);
|
if (!SegmentRewardDic.ContainsKey(_config.DanLV) && _config.SeasonID == seasonID && result)
|
{
|
SeasonAwardClass seasonAwardClass = new SeasonAwardClass();
|
seasonAwardClass.DanLv = _config.DanLV;
|
var crossServerArena = CrossServerArenaConfig.Get(_config.DanLV);
|
if (crossServerArena != null)
|
{
|
seasonAwardClass.Name = crossServerArena.Name;
|
seasonAwardClass.Score = crossServerArena.LVUpScore;
|
}
|
var _jsonData = LitJson.JsonMapper.ToObject(_config.DanLVAwardList);
|
List<Item_Class> itemClassList = new List<Item_Class>();
|
for (int j = 0; j < _jsonData.Count; j++)
|
{
|
Item_Class itemClass = new Item_Class();
|
itemClass.ItemId = int.Parse((_jsonData[j][0]).ToString());
|
itemClass.ItemNumber = int.Parse((_jsonData[j][1]).ToString());
|
itemClass.Isbind = int.Parse((_jsonData[j][2]).ToString());
|
itemClassList.Add(itemClass);
|
}
|
if (itemClassList.Count <= 0)
|
{
|
continue;
|
}
|
seasonAwardClass.ItemList = itemClassList;
|
SegmentRewardDic.Add(_config.DanLV, seasonAwardClass);
|
}
|
}
|
currentId = seasonID;
|
}
|
public void GetSegmentReward()//赛季奖励
|
{
|
var seasonID = CrossServerOneVsOnePKSeason.Instance.SeasonID;
|
var configPK = CrossRealmPKDanAwardList;
|
var result2 = false;
|
for (int j = 0; j < configPK.Count; j++)
|
{
|
var _config = configPK[j];
|
if (CrossServerOneVsOnePKSeason.Instance.CrossZoneName != null)
|
{
|
bool result = CrossServerOneVsOnePKSeason.Instance.CrossZoneName.Equals(_config.CrossZoneName);
|
if (result)
|
{
|
result2 = true;
|
}
|
}
|
}
|
if (CrossServerOneVsOnePKSeason.Instance.CrossZoneName != null && result2)
|
{
|
crossZoneName = CrossServerOneVsOnePKSeason.Instance.CrossZoneName;
|
}
|
if (seasonID == 0)
|
{
|
seasonID += 1;
|
}
|
if (currentId == seasonID && SeasonRewardConfigDic.Count != 0)
|
{
|
return;
|
}
|
var crossRealmPKOrderAward = CrossRealmPKOrderAwardConfig.GetValues();
|
for (int i = 0; i < crossRealmPKOrderAward.Count; i++)
|
{
|
var _config = crossRealmPKOrderAward[i];
|
bool result = crossZoneName.Equals(_config.CrossZoneName);
|
if (seasonID == _config.SeasonID && result)
|
{
|
ImpactRankModel.RankAwardItem _award = new ImpactRankModel.RankAwardItem();
|
var _jsonData = LitJson.JsonMapper.ToObject(_config.SeasonOrderAward);
|
foreach (string key in _jsonData.Keys)
|
{
|
var _ranking = int.Parse(key);
|
var _itemArray = LitJson.JsonMapper.ToObject<int[][]>(_jsonData[key].ToJson());
|
for (int j = 0; j < _itemArray.Length; j++)
|
{
|
_award.Add(_ranking, new Item(_itemArray[j][0], _itemArray[j][1]));
|
}
|
}
|
SeasonRewardDic = _award;
|
}
|
|
}
|
//---
|
SeasonRewardConfigDic.Clear();
|
|
for (int i = 0; i < configPK.Count; i++)
|
{
|
var _config = configPK[i];
|
bool result = crossZoneName.Equals(_config.CrossZoneName);
|
if (!SeasonRewardConfigDic.ContainsKey(_config.DanLV) && _config.SeasonID == seasonID && result)
|
{
|
var _jsonDataC = LitJson.JsonMapper.ToObject(_config.SeasonAwardList);
|
List<Item_Class> itemClassList = new List<Item_Class>();
|
for (int j = 0; j < _jsonDataC.Count; j++)
|
{
|
Item_Class itemClass = new Item_Class();
|
itemClass.ItemId = int.Parse((_jsonDataC[j][0]).ToString());
|
itemClass.ItemNumber = int.Parse((_jsonDataC[j][1]).ToString());
|
itemClass.Isbind = int.Parse((_jsonDataC[j][2]).ToString());
|
itemClassList.Add(itemClass);
|
}
|
if (itemClassList.Count <= 0)
|
{
|
continue;
|
}
|
SeasonRewardConfigDic.Add(_config.DanLV, itemClassList);
|
}
|
}
|
currentId = seasonID;
|
}
|
public void CrossRealmPKAwardState(HC102_tagMCCrossRealmPKAwardState info)//c102跨服PK玩家奖励记录
|
{
|
DayPKCountAwardState = info.DayPKCountAwardState;
|
DayWinCountAwardState = info.DayWinCountAwardState;
|
DanLVAwardState = info.DanLVAwardState;
|
SeasonAwardState = info.SeasonAwardState;
|
if (CrossRealmPKAwardStateUpdate != null)
|
{
|
CrossRealmPKAwardStateUpdate();
|
}
|
RedPointSeg();
|
RedPointSea();
|
}
|
|
public bool IsAwardState(CrossRealmPKAwardStateEnum _cross, int Index)//是否已领取奖励
|
{
|
bool _bool = false;
|
if (_cross == CrossRealmPKAwardStateEnum.SeasonAwardState)
|
{
|
if (SeasonAwardState == 1)
|
{
|
_bool = true;
|
}
|
else
|
{
|
_bool = false;
|
}
|
}
|
else
|
{
|
switch (_cross)
|
{
|
case CrossRealmPKAwardStateEnum.DayPKCountAwardState:
|
_bool = MathUtility.GetBitValue(DayPKCountAwardState, (ushort)Index);
|
break;
|
case CrossRealmPKAwardStateEnum.DayWinCountAwardState:
|
_bool = MathUtility.GetBitValue(DayWinCountAwardState, (ushort)Index);
|
break;
|
case CrossRealmPKAwardStateEnum.DanLVAwardState:
|
_bool = MathUtility.GetBitValue(DanLVAwardState, (ushort)Index);
|
break;
|
}
|
}
|
return _bool;
|
}
|
|
public void CrossRealmPKGetAward(CrossRealmPKAwardStateEnum _cross, int Index)//领奖发包
|
{
|
CC103_tagCMCrossRealmPKGetAward c103 = new CC103_tagCMCrossRealmPKGetAward();
|
c103.AwardType = (byte)_cross;
|
c103.AwardData = (byte)Index;
|
GameNetSystem.Instance.SendInfo(c103);
|
}
|
|
public void ViewCrossPKBillboard(int ZoneID, int SeasonID)//(赛区,赛季) 查看跨服竞技场赛季排行榜
|
{
|
ZoneRankingStruct zoneRanking = new ZoneRankingStruct();
|
zoneRanking.ZoneID = ZoneID;
|
zoneRanking.SeasonID = SeasonID;
|
int seasonIDNow = CrossServerOneVsOnePKSeason.Instance.SeasonID;
|
if (ZoneRankingDic.ContainsKey(zoneRanking))
|
{
|
if (RankInformationUpdate != null)
|
{
|
RankInformationUpdate();
|
}
|
}
|
CC001_tagCGViewCrossPKBillboard c001 = new CC001_tagCGViewCrossPKBillboard();
|
c001.ZoneID = (byte)ZoneID;
|
c001.SeasonID = (byte)SeasonID;
|
GameNetSystem.Instance.SendInfo(c001);
|
}
|
|
public void CrossRealmPKBillboardInfo(HC005_tagGCCrossRealmPKBillboardInfo info)//跨服PK赛季排行榜
|
{
|
Dictionary<int, RankingInformationClass> RankInformationDic = new Dictionary<int, RankingInformationClass>();
|
if (info.Count > 0)
|
{
|
for (int i = 0; i < info.Count; i++)
|
{
|
if (!RankInformationDic.ContainsKey(i))
|
{
|
RankingInformationClass RankingInformation = new RankingInformationClass();
|
RankingInformation.PlayerID = (int)info.PKBillboardList[i].PlayerID;
|
RankingInformation.PlayerName = info.PKBillboardList[i].PlayerName;
|
RankingInformation.Job = info.PKBillboardList[i].Job;
|
RankingInformation.Face = (int)info.PKBillboardList[i].Face;
|
RankingInformation.FacePic = (int)info.PKBillboardList[i].FacePic;
|
RankingInformation.Power = (int)info.PKBillboardList[i].FightPower;
|
RankingInformation.Realm = (int)info.PKBillboardList[i].RealmLV;
|
RankingInformation.DanLv = (int)info.PKBillboardList[i].DanLV;
|
RankingInformation.PkScore = (int)info.PKBillboardList[i].PKScore;
|
RankInformationDic.Add(i, RankingInformation);
|
if (PlayerDatas.Instance.baseData.PlayerID == info.PKBillboardList[i].PlayerID)
|
{
|
MyRank = i;
|
}
|
}
|
else
|
{
|
RankingInformationClass RankingInformation = new RankingInformationClass();
|
RankingInformation.PlayerID = (int)info.PKBillboardList[i].PlayerID;
|
RankingInformation.PlayerName = info.PKBillboardList[i].PlayerName;
|
RankingInformation.Job = info.PKBillboardList[i].Job;
|
RankingInformation.Face = (int)info.PKBillboardList[i].Face;
|
RankingInformation.FacePic = (int)info.PKBillboardList[i].FacePic;
|
RankingInformation.Power = (int)info.PKBillboardList[i].FightPower;
|
RankingInformation.Realm = (int)info.PKBillboardList[i].RealmLV;
|
RankingInformation.DanLv = (int)info.PKBillboardList[i].DanLV;
|
RankingInformation.PkScore = (int)info.PKBillboardList[i].PKScore;
|
RankInformationDic[i] = RankingInformation;
|
}
|
}
|
}
|
ZoneRankingStruct zoneRank = new ZoneRankingStruct();
|
zoneRank.ZoneID = info.ZoneID;
|
zoneRank.SeasonID = info.SeasonID;
|
if (!ZoneRankingDic.ContainsKey(zoneRank))
|
{
|
ZoneRankingDic.Add(zoneRank, RankInformationDic);
|
}
|
else
|
{
|
if (RankInformationDic.Count > 0)
|
{
|
ZoneRankingDic[zoneRank] = RankInformationDic;
|
}
|
}
|
if (RankInformationUpdate != null)
|
{
|
RankInformationUpdate();
|
}
|
}
|
|
public static void ExitCrossRealm()//退出跨服副本
|
{
|
var match = new CC104_tagCMExitCrossRealm();
|
GameNetSystem.Instance.SendToCrossServer(match);
|
}
|
|
private static int pkDanLvNow = 0;
|
public static int PkDanLvNow//获取在跨服副本当前段位
|
{
|
get { return pkDanLvNow; }
|
set { pkDanLvNow = value; }
|
}
|
|
private void RedPointSeg()//段位奖励红点
|
{
|
int Danlv = CrossServerOneVsOnePlayerInfo.Instance.DanLV;
|
bool Isbool = false;
|
foreach (var key in SegmentRewardDic.Keys)
|
{
|
if (Danlv >= SegmentRewardDic[key].DanLv && !IsAwardState(CrossRealmPKAwardStateEnum.DanLVAwardState, SegmentRewardDic[key].DanLv))
|
{
|
Isbool = true;
|
}
|
}
|
if (Isbool)
|
{
|
redPointStre1.state = RedPointState.Simple;
|
}
|
else
|
{
|
redPointStre1.state = RedPointState.None;
|
}
|
|
CrossServerUtility.UpdateCrossServerRedpoint();
|
}
|
|
private void RedPointSea()//赛季奖励红点
|
{
|
bool Isbool = false;
|
int Danlv = CrossServerOneVsOnePlayerInfo.Instance.DanLV;
|
bool isbool = IsAwardState(CrossRealmPKAwardStateEnum.SeasonAwardState, -1);
|
int Number = 0;
|
foreach (var key in SeasonRewardDic.AwardDic.Keys)
|
{
|
Number = key;
|
}
|
|
if (CrossServerOneVsOnePKSeason.Instance.SeasonState == 2 && CrossServerOneVsOnePlayerInfo.Instance.Score != 0 && !isbool)
|
{
|
if ((MyRank > -1 && MyRank < Number) || SeasonRewardConfigDic.ContainsKey(Danlv))
|
{
|
Isbool = true;
|
}
|
}
|
|
if (Isbool)
|
{
|
redPointStre2.state = RedPointState.Simple;
|
}
|
else
|
{
|
redPointStre2.state = RedPointState.None;
|
}
|
CrossServerUtility.UpdateCrossServerRedpoint();
|
}
|
|
private static int m_PkType = 0;
|
public static int PkType {
|
get { return m_PkType; }
|
set { m_PkType = value; }
|
}
|
|
public static void SetPkType()
|
{
|
if (m_PkType != 1)
|
{
|
DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)m_PkType);
|
}
|
else
|
{
|
DTCA202_tagMCAttackMode.Send_SwitchAttackMode((E_AttackMode)0);
|
}
|
|
}
|
}
|
|
|
|
|
|