//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, September 12, 2018
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using TableConfig;
|
using System.Collections.Generic;
|
using System;
|
using Snxxz.UI;
|
|
//功能预告红点
|
[XLua.LuaCallCSharp]
|
public class FeatureNoticeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
|
{
|
public List<FunctionForecastConfig> FunctionList = new List<FunctionForecastConfig>();
|
public Dictionary<int, ImpactRankModel.RankAwardItem> DicAwardItem = new Dictionary<int, ImpactRankModel.RankAwardItem>();//奖励物品
|
public Dictionary<int, OpenFuncState> DicOpenFuncState = new Dictionary<int, OpenFuncState>();
|
public Dictionary<int, Redpoint> DicRedPoint = new Dictionary<int, Redpoint>();//红点
|
public event Action UpdateAwarfItem;
|
private const int Redpoint_key1 = 38;
|
public Redpoint redPointStre1 = new Redpoint(Redpoint_key1);
|
private int OpenFuncId = 0;
|
private bool RedPointChange = false;
|
private bool IsRedPoint = false;
|
public int FunctionForecastIndex = 0;
|
public override void Init()
|
{
|
AddList();
|
AddAwardItem();
|
AddRedPoint();
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
//PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayersUpLV;
|
//FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
|
//treasureModel.treasureStateChangeEvent -= treasureStateChangeEvent;
|
//treasureModel.treasureStageUpEvent -= treasureStageUpEvent;
|
FunctionForecastIndex = 0;
|
DicOpenFuncState.Clear();
|
StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
//FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
//PlayerDatas.Instance.PlayerDataRefreshInfoEvent += OnPlayersUpLV;
|
//treasureModel.treasureStateChangeEvent += treasureStateChangeEvent;
|
//treasureModel.treasureStageUpEvent += treasureStageUpEvent;
|
StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;
|
RedPoint_State();
|
// RedDotStatus();
|
}
|
|
private void Updatefighting(PlayerDataRefresh _tCDBPlayerRefresh)
|
{
|
if (_tCDBPlayerRefresh == PlayerDataRefresh.LV &&PlayerDatas.Instance.baseData.LV>=100)
|
{
|
RedPoint_State();
|
}
|
}
|
|
public override void UnInit()
|
{
|
|
}
|
private void OnStageLoadFinish()
|
{
|
if (!(StageManager.Instance.CurrentStage is DungeonStage))
|
{
|
OpenFuncId = 0;
|
RedPointChange = false;
|
IsRedPoint = false;
|
}
|
}
|
//private void treasureStageUpEvent(int obj)
|
//{
|
// RedDotStatus();
|
//}
|
|
//private void treasureStateChangeEvent(int obj)
|
//{
|
// RedDotStatus();
|
//}
|
|
//private void OnFuncStateChangeEvent(int obj)
|
//{
|
// RedDotStatus();
|
//}
|
|
//private void OnPlayersUpLV(PlayerDataRefresh obj)
|
//{
|
// if (obj == PlayerDataRefresh.LV)
|
// {
|
// RedDotStatus();
|
// }
|
//}
|
private void AddList()//添加列表信息
|
{
|
if (FunctionList.Count <= 0)
|
{
|
var configs = Config.Instance.GetAllKeys<FunctionForecastConfig>();
|
foreach (var key in configs)
|
{
|
var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(key);
|
if (functionForecastConfig != null && functionForecastConfig.Display == 1)
|
{
|
FunctionList.Add(functionForecastConfig);
|
}
|
}
|
}
|
}
|
|
private void AddAwardItem()
|
{
|
if (DicAwardItem.Count <= 0)
|
{
|
var configs = Config.Instance.GetAllKeys<FunctionForecastConfig>();
|
foreach (var key in configs)
|
{
|
var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(key);
|
if (!DicAwardItem.ContainsKey(functionForecastConfig.FuncId) && functionForecastConfig.Display == 1)
|
{
|
ImpactRankModel.RankAwardItem _award = new ImpactRankModel.RankAwardItem();
|
if (functionForecastConfig.Award == string.Empty)
|
{
|
continue;
|
}
|
var _jsonData = LitJson.JsonMapper.ToObject(functionForecastConfig.Award);
|
foreach (string _key in _jsonData.Keys)
|
{
|
var _job = int.Parse(_key);
|
var _itemArray = LitJson.JsonMapper.ToObject<int[][]>(_jsonData[_key].ToJson());
|
for (int j = 0; j < _itemArray.Length; j++)
|
{
|
_award.Add(_job, new AwardItem()
|
{
|
item = new Item(_itemArray[j][0], _itemArray[j][1]),
|
isBind = 1,
|
});
|
}
|
}
|
DicAwardItem.Add(functionForecastConfig.FuncId, _award);
|
}
|
}
|
// DebugEx.LogError(DicAwardItem);
|
}
|
|
}
|
|
private void AddRedPoint()
|
{
|
if (DicRedPoint.Count <= 0)
|
{
|
var configs = Config.Instance.GetAllKeys<FunctionForecastConfig>();
|
foreach (var key in configs)
|
{
|
var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(key);
|
if (!DicRedPoint.ContainsKey(functionForecastConfig.FuncId) && functionForecastConfig.Display == 1)
|
{
|
int RedPointkey = Redpoint_key1 * 10000 + functionForecastConfig.FuncId;
|
Redpoint redPointMountStare = new Redpoint(Redpoint_key1, RedPointkey);
|
DicRedPoint.Add(functionForecastConfig.FuncId, redPointMountStare);
|
}
|
}
|
}
|
}
|
|
private void RedPoint_State()
|
{
|
var configs = Config.Instance.GetAllKeys<FunctionForecastConfig>();
|
foreach (var key in DicRedPoint.Keys)
|
{
|
DicRedPoint[key].state=RedPointState.None;
|
}
|
if (PlayerDatas.Instance.baseData.LV <= 100)//功能预告红点110级前不显示
|
{
|
return;
|
}
|
foreach (var _key in DicOpenFuncState.Keys)
|
{
|
if (DicRedPoint.ContainsKey(_key) && DicOpenFuncState[_key].State==1
|
&& DicOpenFuncState[_key].AwardState==0 && DicAwardItem.ContainsKey(_key))
|
{
|
DicRedPoint[_key].state = RedPointState.Simple;
|
}
|
}
|
}
|
//private void RedDotStatus()//红点1
|
//{
|
// for (int i = 0; i < FunctionList.Count; i++)
|
// {
|
// if (!FuncOpen.Instance.IsFuncOpen(FunctionList[i].FuncId))
|
// {
|
// redPointStre1.state = RedPointState.None;
|
// if (OpenFuncId != FunctionList[i].FuncId)
|
// {
|
// RedPointChange = false;
|
// }
|
// if (OpenFuncId != FunctionList[i].FuncId || !RedPointChange)
|
// {
|
// OpenFuncId = FunctionList[i].FuncId;
|
// IsRedPoint = false;
|
// TrailerClassification(FunctionList[i].FuncId);
|
// }
|
// return;
|
// }
|
// }
|
//}
|
|
//private void TrailerClassification(int funcID)//红点1
|
//{
|
// FuncOpenLVConfig funcoPenConfig = Config.Instance.Get<FuncOpenLVConfig>(funcID);
|
// var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(funcID);
|
// if (funcoPenConfig.LimitMagicWeapon != 0 || funcoPenConfig.LimitMissionID != 0)
|
// {
|
// if (funcoPenConfig.LimitMagicWeapon != 0)//法宝
|
// {
|
// int faBaoID = funcoPenConfig.LimitMagicWeapon / 100;
|
// MagicWeapon(faBaoID, funcID);
|
// return;
|
// }
|
// else if (funcoPenConfig.LimitMissionID != 0)//任务
|
// {
|
// if (functionForecastConfig.RedPointLV <= 0)
|
// {
|
// return;
|
// }
|
// if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.RedPointLV)
|
// {
|
// RedPointChange = true;
|
// IsRedPoint = true;
|
// }
|
// if (IsRedPoint)
|
// {
|
// redPointStre1.state = RedPointState.Simple;
|
// }
|
// else
|
// {
|
// redPointStre1.state = RedPointState.None;
|
// }
|
// return;
|
// }
|
// }
|
// else//等级
|
// {
|
// if (functionForecastConfig.RedPointLV <= 0)
|
// {
|
// return;
|
// }
|
// if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.RedPointLV)
|
// {
|
// RedPointChange = true;
|
// IsRedPoint = true;
|
// }
|
// if (IsRedPoint)
|
// {
|
// redPointStre1.state = RedPointState.Simple;
|
// }
|
// else
|
// {
|
// redPointStre1.state = RedPointState.None;
|
// }
|
// return;
|
// }
|
//}
|
TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
|
//private void MagicWeapon(int fabaoID, int funcID)//红点1
|
//{
|
// var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(funcID);
|
// if (functionForecastConfig.RedPointLV > 0)//根据填的等级来
|
// {
|
// if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.RedPointLV)
|
// {
|
// RedPointChange = true;
|
// IsRedPoint = true;
|
// }
|
// if (IsRedPoint)
|
// {
|
// redPointStre1.state = RedPointState.Simple;
|
// }
|
// else
|
// {
|
// redPointStre1.state = RedPointState.None;
|
// }
|
// return;
|
// }
|
// Treasure treasure;//根据解锁法宝的百分比
|
|
// if (treasureModel.TryGetTreasure(fabaoID, out treasure)
|
// && treasure.state == TreasureState.Collected)
|
// {
|
// var list = treasure.treasureStages;
|
// var funcStage = 0;
|
// for (int i = 0; i < list.Count; i++)
|
// {
|
// if (list[i].unlockType == TreasureStageUnlock.Func &&
|
// list[i].func == funcID)
|
// {
|
// funcStage = i;
|
// break;
|
// }
|
// }
|
// if (treasure.stage == funcStage - 1 || funcStage == 0)
|
// {
|
// float exp = ((float)treasure.exp / treasure.treasureStages[funcStage].exp) * 100;
|
// if (functionForecastConfig.RedPointPercentage > -1)
|
// {
|
// if (exp >= functionForecastConfig.RedPointPercentage)
|
// {
|
// RedPointChange = true;
|
// IsRedPoint = true;
|
// }
|
// if (IsRedPoint)
|
// {
|
// redPointStre1.state = RedPointState.Simple;
|
// }
|
// }
|
// else
|
// {
|
// redPointStre1.state = RedPointState.None;
|
// }
|
// }
|
// }
|
//}
|
|
public IEnumerator WhetherToPlayTheBox()
|
{
|
yield return new WaitForSeconds(0.7f);
|
var inDungeon = IsDungeon();
|
var IsOpenMaininterface = WindowCenter.Instance.IsOpen<MainInterfaceWin>();
|
var IsOpenOffLineOnHook = WindowCenter.Instance.IsOpen<OffLineOnHookWin>();
|
var treasureModel = ModelCenter.Instance.GetModel<TreasureModel>();
|
var IsLoading = StageManager.Instance.isLoading;
|
if (NewBieCenter.Instance.inGuiding || treasureModel.newGotShowing || inDungeon || !IsOpenMaininterface
|
|| treasureModel.treasureStageUpShow || WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() ||
|
IsOpenOffLineOnHook || IsLoading)
|
{
|
yield break;
|
}
|
for (int i = 0; i < FunctionList.Count; i++)
|
{
|
if (!FuncOpen.Instance.IsFuncOpen(FunctionList[i].FuncId))
|
{
|
var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(FunctionList[i].FuncId);
|
if (functionForecastConfig.FrameLevel <= 0)
|
{
|
yield break;
|
}
|
string strKey = "FeatureNotice" + functionForecastConfig.FrameLevel + PlayerDatas.Instance.baseData.PlayerID;
|
int type = LocalSave.GetInt(strKey);
|
bool IsOpenMain = WindowCenter.Instance.IsOpen<MainInterfaceWin>();
|
if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.FrameLevel && type == 0)
|
{
|
LocalSave.SetInt(strKey, functionForecastConfig.FrameLevel);
|
var IsOpenFeatureNotice = WindowCenter.Instance.IsOpen<FeatureNotice2Win>();
|
if (!IsOpenFeatureNotice)
|
{
|
WindowCenter.Instance.Close<MainInterfaceWin>();
|
WindowCenter.Instance.Open<FeatureNotice2Win>();
|
}
|
}
|
}
|
}
|
}
|
private bool IsDungeon()
|
{
|
var mapId = PlayerDatas.Instance.baseData.MapID;
|
var mapConfig = Config.Instance.Get<MapConfig>(mapId);
|
return mapConfig != null && mapConfig.MapFBType != 0;
|
}
|
List<FunctionForecastConfig> functionForecastValue = new List<FunctionForecastConfig>();
|
public int GetOpenLv(int Inedx)
|
{
|
int lv = 0;
|
if (functionForecastValue.Count <= 0)
|
{
|
functionForecastValue= Config.Instance.GetAllValues<FunctionForecastConfig>();
|
}
|
// var functionForecastValue = Config.Instance.GetAllValues<FunctionForecastConfig>();
|
foreach (var value in functionForecastValue)
|
{
|
if (value.OpenNumber == Inedx)
|
{
|
lv = value.DisplayLevel;
|
return lv;
|
}
|
}
|
return lv;
|
}
|
public class OpenFuncState
|
{
|
public int State;
|
public int AwardState;
|
|
}
|
|
public void OpenFuncAwardState(HA302_tagMCFuncOpenStateList info)
|
{
|
for (int i = 0; i < info.FuncCount; i++)
|
{
|
int FuncID = info.FuncStateList[i].FuncID;
|
if (!DicOpenFuncState.ContainsKey(FuncID))
|
{
|
OpenFuncState openFuncState = new OpenFuncState();
|
openFuncState.State = info.FuncStateList[i].State;
|
openFuncState.AwardState = info.FuncStateList[i].AwardState;
|
DicOpenFuncState.Add(FuncID, openFuncState);
|
}
|
else
|
{
|
DicOpenFuncState[FuncID].State= info.FuncStateList[i].State;
|
DicOpenFuncState[FuncID].AwardState = info.FuncStateList[i].AwardState;
|
}
|
}
|
if (UpdateAwarfItem != null)
|
{
|
UpdateAwarfItem();
|
}
|
RedPoint_State();
|
}
|
public void SendGetAward(int OpenFuncId)
|
{
|
CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward();
|
getReward.RewardType = (byte)GotServerRewardType.Def_RewardType_OpenFunc;
|
getReward.DataEx = (uint)OpenFuncId;
|
getReward.DataExStrLen = 0;
|
getReward.DataExStr = string.Empty;
|
GameNetSystem.Instance.SendInfo(getReward);
|
}
|
}
|