using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
using LitJson;
|
using System;
|
|
namespace vnxbqy.UI
|
{
|
|
public class KingFairyModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
|
{
|
public override void Init()
|
{
|
ParseConfig();
|
kingFairyData = new KingFairyData();
|
DTCA003_tagUniversalGameRecInfo.onGetUniversalGameInfo += OnGetUniversalGameInfo;
|
RoleParticularModel.OnRevPackage += UpdatePlayerParticularEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
m_SalaryRedpoint = new Redpoint(10705, 1070501);
|
}
|
|
private void OnFuncStateChangeEvent(int _key)
|
{
|
if (_key == 111)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
public override void UnInit()
|
{
|
DTCA003_tagUniversalGameRecInfo.onGetUniversalGameInfo -= OnGetUniversalGameInfo;
|
RoleParticularModel.OnRevPackage -= UpdatePlayerParticularEvent;
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
dailySalaryGet = false;
|
hasKingFairy = false;
|
isServerPrepare = false;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
isServerPrepare = true;
|
RequestKingFairyData();
|
UpdateRedpoint();
|
}
|
|
RoleParticularModel m_RoleParticularModel;
|
RoleParticularModel roleParticularModel
|
{
|
get
|
{
|
return m_RoleParticularModel ?? (m_RoleParticularModel = ModelCenter.Instance.GetModel<RoleParticularModel>());
|
}
|
}
|
|
#region 配置
|
public const int KING_FAIRY_INFO = 69;
|
public int[][] salaryAwardItems { get; private set; }
|
public int privilegeItemId { get; private set; }
|
public int multipleWinStartGet { get; private set; }
|
public int multipleWinIntervalGet { get; private set; }
|
public int multipleWinLimitCnt { get; private set; }
|
public List<List<Item>> multipleWinRewards { get; private set; }
|
|
bool isServerPrepare = false;
|
|
public readonly int multipleWinBuffTypeId = 22101;
|
|
private void ParseConfig()
|
{
|
multipleWinLimitCnt = 99;
|
FuncConfigConfig funcConfig = FuncConfigConfig.Get("FamilyMatchDayReward");
|
salaryAwardItems = JsonMapper.ToObject<int[][]>(funcConfig.Numerical1);
|
privilegeItemId = int.Parse(funcConfig.Numerical3);
|
funcConfig = FuncConfigConfig.Get("FamilyMatchLianWinReward");
|
multipleWinStartGet = int.Parse(funcConfig.Numerical2);
|
multipleWinIntervalGet = int.Parse(funcConfig.Numerical3);
|
var itemArray = LitJson.JsonMapper.ToObject<int[][][]>(funcConfig.Numerical4);
|
if (itemArray != null)
|
{
|
multipleWinRewards = new List<List<Item>>();
|
for (int i = 0; i < itemArray.Length; i++)
|
{
|
var items = new List<Item>();
|
foreach (var _items in itemArray[i])
|
{
|
items.Add(new Item()
|
{
|
id = _items[0],
|
count = _items[1],
|
});
|
}
|
multipleWinRewards.Add(items);
|
}
|
}
|
}
|
|
public int GetWinStreakBuffLv(int _lv)
|
{
|
SkillConfig _skillCfg = SkillConfig.Get(multipleWinBuffTypeId);
|
return _lv <= 0 ? 1 : (_lv > _skillCfg.SkillMaxLV ? _skillCfg.SkillMaxLV : _lv);
|
}
|
public bool NextMultipleWinAward()
|
{
|
if (!hasKingFairy)
|
{
|
return false;
|
}
|
if (kingFairyData.multipleWinCnt + 1 < multipleWinStartGet)
|
{
|
return false;
|
}
|
if ((kingFairyData.multipleWinCnt + 1 - multipleWinStartGet) % multipleWinIntervalGet == 0)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
public Item viewChestItem;
|
public void ViewKingFairyChest(int _itemId, int count)
|
{
|
viewChestItem = new Item()
|
{
|
id = _itemId,
|
count = count,
|
};
|
}
|
#endregion
|
#region 协议
|
public bool hasKingFairy { get; private set; }
|
public KingFairyData kingFairyData { get; private set; }
|
public bool dailySalaryGet { get; private set; }
|
public event Action UpdateKingFairyEvent;
|
public bool IsSelfInKingFairy()
|
{
|
if (!PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
return false;
|
}
|
if (!hasKingFairy)
|
{
|
return false;
|
}
|
return PlayerDatas.Instance.fairyData.fairy.FamilyID == kingFairyData.fairyId;
|
}
|
private void UpdatePlayerParticularEvent(int viewTyte, int playerID, RoleParticularModel.ViewPlayerData viewPlayerData)
|
{
|
if (viewTyte != (int)ViewPlayerType.viewPlayerDataFairyKing)
|
{
|
return;
|
}
|
kingFairyData.leaderData = viewPlayerData;
|
if (UpdateKingFairyEvent != null)
|
{
|
UpdateKingFairyEvent();
|
}
|
}
|
private void OnGetUniversalGameInfo(HA003_tagUniversalGameRecInfo package)
|
{
|
if (package.Type == KING_FAIRY_INFO)
|
{
|
hasKingFairy = false;
|
if (package.Count == 0)
|
{
|
return;
|
}
|
var _sData = package.UniversalGameRec[0];
|
kingFairyData.fairyId = (int)_sData.Value1;
|
kingFairyData.multipleWinCnt = (int)_sData.Value3;
|
kingFairyData.fairyName = _sData.StrValue1;
|
kingFairyData.leaderId = (int)_sData.Value2;
|
kingFairyData.allotCnt = (int)_sData.Value4;
|
kingFairyData.finalCnt = (int)_sData.Value5;
|
|
if (int.TryParse(_sData.StrValue2, out int result))
|
{
|
kingFairyData.emblemId = result;
|
}
|
else
|
{
|
kingFairyData.emblemId = EmblemHelper.GetDefaultFamilyEmblemId();
|
}
|
|
hasKingFairy = kingFairyData.fairyId != 0;
|
if (isServerPrepare && WindowCenter.Instance.IsOpen<KingTempleWin>())
|
{
|
roleParticularModel.ViewPlayerCacheData(kingFairyData.leaderId, (int)ViewPlayerType.viewPlayerDataFairyKing);
|
}
|
if (UpdateKingFairyEvent != null)
|
{
|
UpdateKingFairyEvent();
|
}
|
UpdateRedpoint();
|
}
|
}
|
public void RequestKingFairyData()
|
{
|
CA001_tagViewUniversalGameRec _pak = new CA001_tagViewUniversalGameRec();
|
_pak.ViewType = (byte)KING_FAIRY_INFO;
|
GameNetSystem.Instance.SendInfo(_pak);
|
}
|
public event Action UpdateDailySalaryEvent;
|
public void UpdateDailySalary(int _state)
|
{
|
dailySalaryGet = _state == 1;
|
UpdateRedpoint();
|
if (UpdateDailySalaryEvent != null)
|
{
|
UpdateDailySalaryEvent();
|
}
|
}
|
public void AllotMultipleWinAward(int _memberId)
|
{
|
if (!IsSelfInKingFairy())
|
{
|
return;
|
}
|
if (PlayerDatas.Instance.PlayerId != kingFairyData.leaderId)
|
{
|
return;
|
}
|
CA410_tagCGFamilyWarWinRewardAllot _pak = new CA410_tagCGFamilyWarWinRewardAllot();
|
_pak.MemPlayerID = (uint)_memberId;
|
GameNetSystem.Instance.SendInfo(_pak);
|
if (WindowCenter.Instance.IsOpen<KingFairyAllotWin>())
|
{
|
WindowCenter.Instance.Close<KingFairyAllotWin>();
|
}
|
}
|
#endregion
|
|
#region 红点
|
private Redpoint m_KingFairyRedpoint = new Redpoint(107, 10705);
|
public Redpoint m_SalaryRedpoint { get; private set; }
|
public void UpdateRedpoint()
|
{
|
m_SalaryRedpoint.state = RedPointState.None;
|
if (!IsSelfInKingFairy())
|
{
|
return;
|
}
|
if (!FuncOpen.Instance.IsFuncOpen(111))
|
{
|
return;
|
}
|
if (dailySalaryGet)
|
{
|
return;
|
}
|
m_SalaryRedpoint.state = RedPointState.Simple;
|
}
|
#endregion
|
}
|
|
public class KingFairyData
|
{
|
public int fairyId;
|
public int leaderId;
|
public int multipleWinCnt;
|
public int allotCnt;
|
public int finalCnt;
|
public string fairyName;
|
public int emblemId;
|
public RoleParticularModel.ViewPlayerData leaderData;
|
}
|
}
|
|