| | |
| | |
|
| | | readonly List<int> m_GemHoleItemIds = new List<int> { 0, 0, 0, 0 };
|
| | |
|
| | | public readonly Redpoint redpoint = new Redpoint(106, 10609);
|
| | | public readonly Redpoint redpoint = new Redpoint(106, 10602);
|
| | |
|
| | | public const int EQUIPGEM_HOLE_COUNT = 4;
|
| | | public static int REDPOINTBASE = 106090000;
|
| | | public static int REDPOINTBASE = 106020000;
|
| | |
|
| | | int m_SelectLevel = 0;
|
| | | public int selectLevel
|
| | |
| | | foreach (var level in totalEquipLevels)
|
| | | {
|
| | | var equipSetRedpointBase = REDPOINTBASE++;
|
| | | m_EquipSetRedpoints[level] = new Redpoint(10609, equipSetRedpointBase);
|
| | | m_EquipSetRedpoints[level] = new Redpoint(redpoint.id, equipSetRedpointBase);
|
| | | foreach (var place in m_EquipPlaces)
|
| | | {
|
| | | var packIndex = EquipPlaceMapConfig.GetServerPlace(level, place);
|
| | | if (!m_EquipGemRedpoints.ContainsKey(packIndex))
|
| | | {
|
| | | EquipGemRedpoint redpoint = new EquipGemRedpoint(equipSetRedpointBase);
|
| | | m_EquipGemRedpoints.Add(packIndex, redpoint);
|
| | | EquipGemRedpoint _redpoint = new EquipGemRedpoint(equipSetRedpointBase);
|
| | | m_EquipGemRedpoints.Add(packIndex, _redpoint);
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | return m_GemTypes.TryGetValue(type, out gemType);
|
| | | }
|
| | |
|
| | | public bool TryGetRedpoint(int level, int place, out EquipGemRedpoint redpoint)
|
| | | public bool TryGetRedpoint(int level, int place, out EquipGemRedpoint _redpoint)
|
| | | {
|
| | | var packIndex = EquipPlaceMapConfig.GetServerPlace(level, place);
|
| | | return m_EquipGemRedpoints.TryGetValue(packIndex, out redpoint);
|
| | | return m_EquipGemRedpoints.TryGetValue(packIndex, out _redpoint);
|
| | | }
|
| | |
|
| | | public bool TryGetRedpoint(int level, out Redpoint redpoint)
|
| | | public bool TryGetRedpoint(int level, out Redpoint _redpoint)
|
| | | {
|
| | | return m_EquipSetRedpoints.TryGetValue(level, out redpoint);
|
| | | return m_EquipSetRedpoints.TryGetValue(level, out _redpoint);
|
| | | }
|
| | |
|
| | | public Int2 TryGotoUseGem(int itemId)
|
| | |
| | | return level;
|
| | | }
|
| | |
|
| | | public int GetEmptyGemHoleCount(int level, int place)
|
| | | {
|
| | | var count = 0;
|
| | | for (int i = 0; i < EQUIPGEM_HOLE_COUNT; i++)
|
| | | {
|
| | | var itemId = 0;
|
| | | if (IsEquipGemHoleOpen(level, place, i)
|
| | | && !TryGetEquipGem(level, place, i, out itemId))
|
| | | {
|
| | | count++;
|
| | | }
|
| | | }
|
| | | return count;
|
| | | }
|
| | |
|
| | | public int GetGemLevel(int itemId)
|
| | | {
|
| | | var config = ItemConfig.Get(itemId);
|
| | | return config == null ? 0 : config.EffectValueB1;
|
| | | }
|
| | |
|
| | | public int Compare(string lhs, string rhs)
|
| | | {
|
| | | var lhsItem = packModel.GetItemByGuid(lhs);
|
| | |
| | | return m_CacheEquipSets;
|
| | | }
|
| | | }
|
| | | List<int> cacheInlayGemTypes = new List<int>();
|
| | | List<int> cacheComposeGemTypes = new List<int>();
|
| | | Dictionary<int, List<bool>> inlayAbles = new Dictionary<int, List<bool>>();
|
| | | Dictionary<int, List<bool>> composeAbles = new Dictionary<int, List<bool>>();
|
| | |
|
| | | void RefreshRedpoint()
|
| | | {
|
| | | cacheInlayGemTypes.Clear();
|
| | |
|
| | | foreach (var level in cacheEquipSets)
|
| | | {
|
| | | foreach (var place in m_EquipPlaces)
|
| | | {
|
| | | var packIndex = EquipPlaceMapConfig.GetServerPlace(level, place);
|
| | | if (!inlayAbles.ContainsKey(packIndex))
|
| | | {
|
| | | inlayAbles[packIndex] = new List<bool>(EQUIPGEM_HOLE_COUNT) { false, false, false, false };
|
| | | }
|
| | | if (!composeAbles.ContainsKey(packIndex))
|
| | | {
|
| | | composeAbles[packIndex] = new List<bool>(EQUIPGEM_HOLE_COUNT) { false, false, false, false };
|
| | | }
|
| | | for (int i = 0; i < EQUIPGEM_HOLE_COUNT; i++)
|
| | | {
|
| | | inlayAbles[packIndex][i] = false;
|
| | | composeAbles[packIndex][i] = false;
|
| | | }
|
| | | }
|
| | | }
|
| | | List<int> places = new List<int>(m_EquipPlaces);
|
| | |
|
| | | #region 检查空的孔位
|
| | | places.Sort((int x, int y) =>
|
| | | {
|
| | | List<int> x_types;
|
| | | List<int> y_types;
|
| | | if (TryGetGemTypes(x, out x_types)
|
| | | && TryGetGemTypes(y, out y_types))
|
| | | {
|
| | | if (x_types[0] != y_types[0])
|
| | | {
|
| | | return -x_types[0].CompareTo(y_types[0]);
|
| | | }
|
| | | }
|
| | | return x.CompareTo(y);
|
| | | });
|
| | |
|
| | | foreach (var level in cacheEquipSets)
|
| | | {
|
| | | foreach (var place in m_EquipPlaces)
|
| | | foreach (var place in places)
|
| | | {
|
| | | EquipGemRedpoint equipGemRedpoint;
|
| | | TryGetRedpoint(level, place, out equipGemRedpoint);
|
| | | for (int i = 0; i < EQUIPGEM_HOLE_COUNT; i++)
|
| | | {
|
| | | int equipGem;
|
| | |
| | | {
|
| | | if (SatisfyInlayBetterGem(level, place, i))
|
| | | {
|
| | | var packIndex = EquipPlaceMapConfig.GetServerPlace(level, place);
|
| | | inlayAbles[packIndex][i] = true;
|
| | | cacheInlayGemTypes.AddRange(m_EquipGemTypes[place]);
|
| | | break;
|
| | | SetRedpoint(new Int2(level, place), i, 1);
|
| | | return;
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | #region 检查所有孔位
|
| | | foreach (var level in cacheEquipSets)
|
| | | {
|
| | | foreach (var place in m_EquipPlaces)
|
| | | foreach (var place in places)
|
| | | {
|
| | | EquipGemRedpoint equipGemRedpoint;
|
| | | TryGetRedpoint(level, place, out equipGemRedpoint);
|
| | | for (int i = 0; i < EQUIPGEM_HOLE_COUNT; i++)
|
| | | {
|
| | | if (SatisfyInlayBetterGem(level, place, i))
|
| | | {
|
| | | var packIndex = EquipPlaceMapConfig.GetServerPlace(level, place);
|
| | | inlayAbles[packIndex][i] = true;
|
| | | cacheInlayGemTypes.AddRange(m_EquipGemTypes[place]);
|
| | | break;
|
| | | SetRedpoint(new Int2(level, place), i, 1);
|
| | | return;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | cacheComposeGemTypes.Clear();
|
| | | #region 检查非空孔位
|
| | | int cacheLevel = 0;
|
| | | Int2 position = Int2.zero;
|
| | | int hole = 0;
|
| | | int type = 0;
|
| | | foreach (var level in cacheEquipSets)
|
| | | {
|
| | | foreach (var place in m_EquipPlaces)
|
| | | foreach (var place in places)
|
| | | {
|
| | | EquipGemRedpoint equipGemRedpoint;
|
| | | TryGetRedpoint(level, place, out equipGemRedpoint);
|
| | | for (int i = 0; i < EQUIPGEM_HOLE_COUNT; i++)
|
| | | {
|
| | | int equipGem;
|
| | |
| | | {
|
| | | if (SatisfyComposeGem(level, place, i))
|
| | | {
|
| | | var packIndex = EquipPlaceMapConfig.GetServerPlace(level, place);
|
| | | composeAbles[packIndex][i] = true;
|
| | | var config = ItemConfig.Get(equipGem);
|
| | | var type = config.EffectValueA1;
|
| | | cacheComposeGemTypes.Add(type);
|
| | | if (cacheLevel == 0 || cacheLevel > GetGemLevel(equipGem))
|
| | | {
|
| | | cacheLevel = GetGemLevel(equipGem);
|
| | | position.x = level;
|
| | | position.y = place;
|
| | | hole = i;
|
| | | type = 2;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | }
|
| | | #endregion
|
| | |
|
| | | SetRedpoint(position, hole, type);
|
| | | }
|
| | |
|
| | | void SetRedpoint(Int2 position, int hole, int type)
|
| | | {
|
| | | foreach (var level in cacheEquipSets)
|
| | | {
|
| | | foreach (var place in m_EquipPlaces)
|
| | |
| | | TryGetRedpoint(level, place, out equipGemRedpoint);
|
| | | for (int i = 0; i < EQUIPGEM_HOLE_COUNT; i++)
|
| | | {
|
| | | equipGemRedpoint.SetInlayRedpoint(i, inlayAbles[packIndex][i]);
|
| | | equipGemRedpoint.SetComposeRedpoint(i, composeAbles[packIndex][i]);
|
| | | var inlayAble = position.x == level && position.y == place && hole == i && type == 1;
|
| | | var composeAble = position.x == level && position.y == place && hole == i && type == 2;
|
| | | equipGemRedpoint.SetInlayRedpoint(i, inlayAble);
|
| | | equipGemRedpoint.SetComposeRedpoint(i, composeAble);
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | List<int> gemTypes = m_EquipGemTypes[place];
|
| | | foreach (var type in gemTypes)
|
| | | {
|
| | | if (cacheInlayGemTypes.Contains(type))
|
| | | {
|
| | | continue;
|
| | | }
|
| | | var count = GetBetterGemCount(type, equipGemLevel);
|
| | | if (count > 0)
|
| | | {
|
| | |
| | | }
|
| | | var config = ItemConfig.Get(equipGem);
|
| | | var type = config.EffectValueA1;
|
| | | if (cacheComposeGemTypes.Contains(type))
|
| | | {
|
| | | return false;
|
| | | }
|
| | | var emptyHoleCount = GetSameTypeEmptyUnlockHole(cacheEquipSets, type);
|
| | | var sameLevelCount = GetSameLevelGemCount(type, config.EffectValueB1);
|
| | | sameLevelCount -= emptyHoleCount;
|