From 973cc1290e8121add5ccf9fc16e48e7dcb8e7488 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 11 九月 2018 19:54:54 +0800
Subject: [PATCH] 3460【前端】【1.0.15】【主干】符印新增仙玉开启新符印孔位
---
System/DailyQuest/DayRemind.cs | 2
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs.meta | 12 ++
System/Rune/RuneMosaicWin.cs | 86 ++++++++++++-
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs | 18 +++
System/Rune/RuneModel.cs | 225 +++++++++++++++++++++++++++++--------
5 files changed, 283 insertions(+), 60 deletions(-)
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs
new file mode 100644
index 0000000..db8f637
--- /dev/null
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+// A5 13 解锁符印孔 #tagCMUnlockRuneHole
+
+public class CA513_tagCMUnlockRuneHole : GameNetPackBasic {
+ public byte HoleIndex; // 孔索引
+
+ public CA513_tagCMUnlockRuneHole () {
+ combineCmd = (ushort)0x03FE;
+ _cmd = (ushort)0xA513;
+ }
+
+ public override void WriteToBytes () {
+ WriteBytes (HoleIndex, NetDataType.BYTE);
+ }
+
+}
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs.meta b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs.meta
new file mode 100644
index 0000000..b907f43
--- /dev/null
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA513_tagCMUnlockRuneHole.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3f6185b8e05fd074f9e72468aa164715
+timeCreated: 1536652620
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/DailyQuest/DayRemind.cs b/System/DailyQuest/DayRemind.cs
index 754d6c4..6230862 100644
--- a/System/DailyQuest/DayRemind.cs
+++ b/System/DailyQuest/DayRemind.cs
@@ -44,6 +44,7 @@
public const string OSTIMEGIFT_REDPOINT = "OSTimeGift_Redpoint";
public const string OSGIFT_REDPOINT = "OSGitf_Redpoint";
public const string TASK_SKILL_HOLE = "TaskSkillHole";
+ public const string RUNE_SPECIAL_HOLE = "RuneSpecialHole";
public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>();
public bool GetDayRemind(string _remindKey)
@@ -96,6 +97,7 @@
SetDayRemind(OSTIMEGIFT_REDPOINT);
SetDayRemind(OSGIFT_REDPOINT);
SetDayRemind(TASK_SKILL_HOLE);
+ SetDayRemind(RUNE_SPECIAL_HOLE);
}
private void SetDayRemind(string _key)
diff --git a/System/Rune/RuneModel.cs b/System/Rune/RuneModel.cs
index b1e60ed..a8f35fa 100644
--- a/System/Rune/RuneModel.cs
+++ b/System/Rune/RuneModel.cs
@@ -8,7 +8,7 @@
namespace Snxxz.UI
{
- public class RuneModel : Model, IBeforePlayerDataInitialize
+ public class RuneModel : Model, IBeforePlayerDataInitialize,IPlayerLoginOk
{
RuneComposeModel m_RuneComposeModel;
RuneComposeModel runeComposeModel {
@@ -20,7 +20,7 @@
public override void Init()
{
ParseConfig();
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < RUNE_HOLE_COUNT; i++)
{
Redpoint redpoint = new Redpoint(10801, 1080101 + i);
runeHoleRedpoints.Add(redpoint);
@@ -28,6 +28,7 @@
}
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+ PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
}
private void OnFuncStateChangeEvent(int func)
@@ -46,11 +47,18 @@
public void OnBeforePlayerDataInitialize()
{
ClearRuneData();
+ serverInited = false;
+ }
+
+ public void OnPlayerLoginOk()
+ {
+ serverInited = true;
}
#region 閰嶇疆
public const int RUNE_TYPE = 30;
public const int RUNE_CREAMTYPE = 31;
+ public const int RUNE_HOLE_COUNT = 9;
public Dictionary<int, Dictionary<int, float>> runeAttrDic = new Dictionary<int, Dictionary<int, float>>();
public Dictionary<int, float> runeAttrAdditionDic = new Dictionary<int, float>();
public Dictionary<int, float> runeExpDic = new Dictionary<int, float>();
@@ -61,7 +69,8 @@
public string runeExpFormula { get; private set; }
public int runePackMaxNum { get; private set; }
public Dictionary<int, int> doublePropRuneInlayDict { get; private set; }
-
+ public Dictionary<int,SpecialRuneHoleCondition> specialHoles = new Dictionary<int, SpecialRuneHoleCondition>();
+ int[] specialRedLevels = null;
private void ParseConfig()
{
@@ -77,15 +86,25 @@
runeExpAddition = float.Parse(FuncConfigConfig.GetRuneNeedExpFormula().Numerical3);
runeEliteAdditonDic = ConfigParse.GetDic<int, float>(FuncConfigConfig.GetRuneNeedExpFormula().Numerical4);
runeExpFormula = FuncConfigConfig.GetRuneNeedExpFormula().Numerical1;
- FuncConfigConfig cfg = Config.Instance.Get<FuncConfigConfig>("RuneUnlock");
- if (cfg != null)
+ FuncConfigConfig config = Config.Instance.Get<FuncConfigConfig>("RuneUnlock");
+ if (config != null)
{
- runeUnlockArray = ConfigParse.GetMultipleStr<int>(cfg.Numerical1);
+ runeUnlockArray = ConfigParse.GetMultipleStr<int>(config.Numerical1);
+ var costDict = ConfigParse.GetDic<int, int>(config.Numerical2);
+ var levelDict = ConfigParse.GetDic<int, int>(config.Numerical3);
+ foreach (var _hole in costDict.Keys)
+ {
+ specialHoles.Add(_hole, new SpecialRuneHoleCondition()
+ {
+ cost = costDict[_hole],
+ level = levelDict.ContainsKey(_hole) ? levelDict[_hole] : 0,
+ });
+ }
}
- cfg = Config.Instance.Get<FuncConfigConfig>("RunePackageNum");
- runePackMaxNum = int.Parse(cfg.Numerical1);
+ config = Config.Instance.Get<FuncConfigConfig>("RunePackageNum");
+ runePackMaxNum = int.Parse(config.Numerical1);
- var config = Config.Instance.Get<FuncConfigConfig>("RuneMaxLV");
+ config = Config.Instance.Get<FuncConfigConfig>("RuneMaxLV");
runeQualityMaxLevel = ConfigParse.GetDic<int, int>(config.Numerical1);
var maxlevel = runeQualityMaxLevel != null ? runeQualityMaxLevel.Values.Last() : 0;
@@ -104,8 +123,11 @@
doublePropertyRunes.Add(_cfg.TagItemID);
}
- cfg = Config.Instance.Get<FuncConfigConfig>("RuneDoubleInlayCnt");
- doublePropRuneInlayDict = ConfigParse.GetDic<int, int>(cfg.Numerical1);
+ config = Config.Instance.Get<FuncConfigConfig>("RuneDoubleInlayCnt");
+ doublePropRuneInlayDict = ConfigParse.GetDic<int, int>(config.Numerical1);
+
+ config = Config.Instance.Get<FuncConfigConfig>("RuneSpecialRedLevel");
+ specialRedLevels = ConfigParse.GetMultipleStr<int>(config.Numerical1);
}
);
@@ -113,6 +135,16 @@
private static StringBuilder _textBuilder = new StringBuilder();
static readonly string replaceValStr = "level";
+
+ bool serverInited = false;
+
+ private void PlayerDataRefreshInfoEvent(PlayerDataRefresh refreshType)
+ {
+ if (refreshType == PlayerDataRefresh.LV)
+ {
+ UpdateSpecialHoleRedpoint();
+ }
+ }
public int GetRuneMaxLevel(int _itemColor)
{
@@ -288,43 +320,45 @@
public Redpoint runeReplaceRedpoint = new Redpoint(1080130);
private List<Redpoint> runeHoleRedpoints = new List<Redpoint>();
public Redpoint runeMosaicRedpoint { get { return m_RuneMosaicRedpoint; } }
-
+ public Redpoint specialRuneRemindRedpoint = new Redpoint(10801, 1080140);
public Redpoint GetRedpoint(int _hole)
{
return runeHoleRedpoints[_hole];
}
- //public void UpdateRedpoint()
- //{
- // for (int i = 0; i < runeHoleRedpoints.Count; i++)
- // {
- // runeHoleRedpoints[i].state = RedPointState.None;
- // }
- // if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Rune))
- // {
- // return;
- // }
- // for (int i = 0; i < runeHoleRedpoints.Count; i++)
- // {
- // RuneData runeData = GetHoleRune(i);
- // if (runeData != null)
- // {
- // if (RuneSplinters >= GetRuneNeedExp(runeData.id, runeData.lv)
- // && runeData.lv < RuneMaxLevel)
- // {
- // runeHoleRedpoints[i].state = RedPointState.Simple;
- // }
- // else if (CanEquipBetterRune(i))
- // {
- // runeHoleRedpoints[i].state = RedPointState.Simple;
- // }
- // }
- // else if (CanMosaicRune(i))
- // {
- // runeHoleRedpoints[i].state = RedPointState.Simple;
- // }
- // }
- //}
+ void UpdateSpecialHoleRedpoint()
+ {
+ specialRuneRemindRedpoint.state = RedPointState.None;
+ if (DayRemind.Instance.GetDayRemind(DayRemind.RUNE_SPECIAL_HOLE))
+ {
+ return;
+ }
+ foreach (var hole in specialHoles.Keys)
+ {
+ if (IsRuneHoleOpen(hole))
+ {
+ continue;
+ }
+ if (PlayerDatas.Instance.baseData.LV >= specialHoles[hole].level
+ && PlayerDatas.Instance.baseData.LV >= specialRedLevels[0]
+ && PlayerDatas.Instance.baseData.LV < specialRedLevels[1])
+ {
+ specialRuneRemindRedpoint.state = RedPointState.Simple;
+ break;
+ }
+ }
+ }
+
+ public void SetDayRemind()
+ {
+ if (specialRuneRemindRedpoint.state == RedPointState.Simple)
+ {
+ DayRemind.Instance.SetDayRemind(DayRemind.RUNE_SPECIAL_HOLE, true);
+ UpdateSpecialHoleRedpoint();
+ }
+ }
+
+
/// <summary>
/// 鏂扮増绗﹀嵃绾㈢偣
///1.鏈夊彲鎿嶄綔鐨勬椂鍊欎粎鎸変紭鍏堢骇鏄剧ず1涓孩鐐�
@@ -447,7 +481,7 @@
public bool CanLevelUpRune(out int _hole)
{
_hole = 0;
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < RUNE_HOLE_COUNT; i++)
{
if (CanLevelUpRune(i))
{
@@ -613,8 +647,11 @@
UpdateRedpoint();
UpdateBreakRedpoint();
}
+
+ public event Action<int> openNewHoleEvent;
public void OnRuneHoleRefresh(HA31F_tagMCRuneInfo vNetData)
{
+ uint oldHoleState = holeState;
holeState = vNetData.RuneHoleOpenState;
for (byte i = 0; i < vNetData.Count; i++)
{
@@ -658,12 +695,92 @@
{
OnRefreshRuneHole();
}
+ for (int i = 0; i < RUNE_HOLE_COUNT; i++)
+ {
+ if (!serverInited)
+ {
+ break;
+ }
+ int k = 1 << i;
+ var oldOpen = (holeState & k) == k;
+ if (!oldOpen && IsRuneHoleOpen(i))
+ {
+ if (openNewHoleEvent != null)
+ {
+ openNewHoleEvent(i);
+ }
+ }
+ }
UpdateRedpoint();
UpdateBreakRedpoint();
+ UpdateSpecialHoleRedpoint();
}
+
+ public void UnlockSpecialHole(int hole)
+ {
+ if (IsSpeicalHole(hole))
+ {
+ if (IsRuneHoleOpen(hole))
+ {
+ return;
+ }
+ int error = 0;
+ if (!TestUnlockSpeicalHole(hole, out error))
+ {
+ ProcessUnlockError(error, specialHoles[hole]);
+ return;
+ }
+ CA513_tagCMUnlockRuneHole pak = new CA513_tagCMUnlockRuneHole();
+ pak.HoleIndex = (byte)hole;
+ GameNetSystem.Instance.SendInfo(pak);
+ }
+ }
+
+ public bool TestUnlockSpeicalHole(int hole, out int error)
+ {
+ error = 0;
+ SpecialRuneHoleCondition speicalHole;
+ if (specialHoles.TryGetValue(hole, out speicalHole))
+ {
+ if (PlayerDatas.Instance.baseData.LV < speicalHole.level)
+ {
+ error = 1;
+ return false;
+ }
+ if (PlayerDatas.Instance.baseData.Gold < speicalHole.cost)
+ {
+ error = 2;
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public void ProcessUnlockError(int error, SpecialRuneHoleCondition specialHole)
+ {
+ switch (error)
+ {
+ case 1:
+ SysNotifyMgr.Instance.ShowTip("RuneSpecialHoleLevelError", specialHole.level);
+ break;
+ case 2:
+ WindowCenter.Instance.Open<RechargeTipWin>();
+ break;
+ }
+ }
+
+ public bool IsSpeicalHole(int hole)
+ {
+ return specialHoles.ContainsKey(hole);
+ }
+
public bool IsRuneHoleOpen(int hole)
{
- if (holeState < 1) return false;
+ if (holeState < 1)
+ {
+ return false;
+ }
int k = 1 << hole;
if ((holeState & k) == k)
{
@@ -688,7 +805,7 @@
public bool IsEmptyHole()
{
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < RUNE_HOLE_COUNT; i++)
{
if (IsRuneHoleOpen(i) && !runeHoleData.ContainsKey(i))
{
@@ -888,7 +1005,7 @@
public bool CanEquipHoleRune(int id, int _color, out int _hole)
{
_hole = 0;
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < RUNE_HOLE_COUNT; i++)
{
if (!IsRuneHoleOpen(i))
{
@@ -980,13 +1097,16 @@
public int GetOpenTowerCnt()
{
int Cnt = 0;
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < RUNE_HOLE_COUNT; i++)
{
if (IsRuneHoleOpen(i))
{
Cnt++;
}
- else break;
+ else
+ {
+ break;
+ }
}
return Cnt;
}
@@ -1064,6 +1184,13 @@
}
#endregion
}
+
+ public struct SpecialRuneHoleCondition
+ {
+ public int level;
+ public int cost;
+ }
+
public class RuneData
{
/// <summary>
diff --git a/System/Rune/RuneMosaicWin.cs b/System/Rune/RuneMosaicWin.cs
index 668e9a6..66369ec 100644
--- a/System/Rune/RuneMosaicWin.cs
+++ b/System/Rune/RuneMosaicWin.cs
@@ -45,10 +45,17 @@
[SerializeField] RectTransform m_ContainerGetRune;
[SerializeField] Button m_GotoGetRuneBtn;
+ [SerializeField] RectTransform m_ContainerSpecial;
+ [SerializeField] Button m_UnlockSpecialHole;
+ [SerializeField] Text m_SpecialCostRemind;
+ [SerializeField] Text m_SpecialLevelRemind;
+
[SerializeField] Text m_RuneUnlockTip;
[SerializeField] UIEffect m_RuneLvUpEffect;
Color m_LevelUpCacheColor;
+
+ bool selectSpeicalHole = false;
RuneModel m_Model;
RuneModel model
@@ -72,6 +79,7 @@
m_RuneLevelUpBtn.onClick.AddListener(OnRuneUpBtn);
m_RunePreviewBtn.onClick.AddListener(OnRunePreviewBtn);
m_GotoGetRuneBtn.onClick.AddListener(OnGotoGetRune);
+ m_UnlockSpecialHole.onClick.AddListener(UnlockSpecialHole);
for (int i = 0; i < runeHoleBtns.Count; i++)
{
var _index = i;
@@ -86,10 +94,12 @@
{
model.OnRefreshRuneHole += OnRuneHoleRefresh;
model.OnRefreshRuneExp += OnUpdateRuneHoleInfo;
+ model.openNewHoleEvent += OpenNewHoleEvent;
m_RuneLevelUpBtn.gameObject.SetActive(false);
m_RuneReplaceBtn.gameObject.SetActive(false);
m_ContainerGetRune.gameObject.SetActive(false);
+ m_ContainerSpecial.gameObject.SetActive(false);
OpenOrCloseSelect(false);
model.sltRuneHole = -1;
foreach (var _hole in runeHoleDatas)
@@ -105,18 +115,33 @@
{
OnRuneHoleClick(CheckOpenSelect());
}
+ model.SetDayRemind();
}
protected override void OnPreClose()
{
model.OnRefreshRuneHole -= OnRuneHoleRefresh;
model.OnRefreshRuneExp -= OnUpdateRuneHoleInfo;
+ model.openNewHoleEvent -= OpenNewHoleEvent;
}
protected override void OnAfterClose()
{
}
#endregion
+
+ private void OpenNewHoleEvent(int hole)
+ {
+ if (model.IsSpeicalHole(hole))
+ {
+
+ }
+ }
+
+ private void UnlockSpecialHole()
+ {
+ model.UnlockSpecialHole(model.sltRuneHole);
+ }
private void OnGotoGetRune()
{
@@ -171,7 +196,17 @@
int CheckOpenSelect()
{
- for (int i = 0; i < 8; i++)
+ if (model.specialRuneRemindRedpoint.state == RedPointState.Simple && !NewBieCenter.Instance.inGuiding)
+ {
+ foreach (var hole in model.specialHoles.Keys)
+ {
+ if (!model.IsRuneHoleOpen(hole))
+ {
+ return hole;
+ }
+ }
+ }
+ for (int i = 0; i < RuneModel.RUNE_HOLE_COUNT; i++)
{
if (model.GetRedpoint(i).state == RedPointState.Simple)
{
@@ -181,15 +216,19 @@
return 0;
}
+ void DisSelectAll()
+ {
+ for (int i = 0; i < RuneModel.RUNE_HOLE_COUNT; i++)
+ {
+ runeHoleDatas[i].SetSelect(false);
+ runeHoleDatas[i].redpoint.gameObject.SetActive(true);
+ }
+ }
+
void OnRuneHoleClick(int _hole)
{
if (model.IsRuneHoleOpen(_hole))
{
- //if (model.sltRuneHole == _hole && model.GetHoleRune(_hole) == null)
- //{
- // WindowCenter.Instance.Open<RunePackWin>();
- // return;
- //}
for (int i = 0; i < runeHoleDatas.Count; i++)
{
if (i != _hole)
@@ -199,6 +238,8 @@
}
}
model.sltRuneHole = _hole;
+ m_RuneUnlockTip.gameObject.SetActive(true);
+ m_ContainerSpecial.gameObject.SetActive(false);
m_RuneLevelUpBtn.gameObject.SetActive(true);
m_RuneReplaceBtn.gameObject.SetActive(true);
OnUpdateRuneHoleInfo();
@@ -208,18 +249,41 @@
}
else
{
- int[] towerArray = model.runeUnlockArray;
- RuneTowerFloorConfig cfg = Config.Instance.Get<RuneTowerFloorConfig>(towerArray[_hole]);
- var tower = Config.Instance.Get<RuneTowerConfig>(cfg.TowerId);
- SysNotifyMgr.Instance.ShowTip("RuneUnlock", StringUtility.Contact(tower.TowerName, cfg.FloorName));
+ if (model.IsSpeicalHole(_hole))
+ {
+ DisplaySpecialHole(_hole);
+ }
+ else
+ {
+ int[] towerArray = model.runeUnlockArray;
+ RuneTowerFloorConfig cfg = Config.Instance.Get<RuneTowerFloorConfig>(towerArray[_hole]);
+ var tower = Config.Instance.Get<RuneTowerConfig>(cfg.TowerId);
+ SysNotifyMgr.Instance.ShowTip("RuneUnlock", StringUtility.Contact(tower.TowerName, cfg.FloorName));
+ }
}
+ }
+
+ private void DisplaySpecialHole(int _hole)
+ {
+ m_ContainerSpecial.gameObject.SetActive(true);
+ m_ContainerSelectRune.gameObject.SetActive(false);
+ m_ContainerGetRune.gameObject.SetActive(false);
+ m_RuneLevelUpBtn.gameObject.SetActive(false);
+ m_RuneReplaceBtn.gameObject.SetActive(false);
+ m_RuneUnlockTip.gameObject.SetActive(false);
+ DisSelectAll();
+ model.sltRuneHole = _hole;
+ runeHoleDatas[_hole].SetSelect(true);
+ var speical = model.specialHoles[_hole];
+ m_SpecialCostRemind.text = Language.Get("RuneSpecialHoleCost", speical.cost);
+ m_SpecialLevelRemind.text = Language.Get("RuneSpecialHoleLevel", speical.level);
}
private void OnUpdateRuneHoleInfo()
{
model.runeLevelUpRedpoint.state = RedPointState.None;
model.runeReplaceRedpoint.state = RedPointState.None;
- if (model.sltRuneHole == -1)
+ if (model.sltRuneHole == -1 || !model.IsRuneHoleOpen(model.sltRuneHole))
{
return;
}
--
Gitblit v1.8.0