359 lines
7.1 KiB
C#
359 lines
7.1 KiB
C#
// ***********************************************************************
|
|
// Company :
|
|
// Author : Kimch
|
|
// Created :
|
|
//
|
|
// Last Modified By : Kimch
|
|
// Last Modified On :
|
|
// ***********************************************************************
|
|
namespace G
|
|
{
|
|
using CodeStage.AntiCheat.ObscuredTypes;
|
|
using F;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 物品基类
|
|
/// </summary>
|
|
public class Item : F.Item.IItem
|
|
{
|
|
#region CONST
|
|
|
|
#endregion
|
|
|
|
#region ENUM
|
|
|
|
public static class Id
|
|
{
|
|
public const int kCoin = 1;
|
|
public const int kGem = 2;
|
|
public const int kAds = 3;
|
|
public const int kRmb = 4;
|
|
public const int kChip = 5;
|
|
public const int kChip2 = 36;
|
|
public const int kEnergy = 6;
|
|
public const int kGrade = 7;
|
|
public const int kExp = 8;
|
|
public const int kBeautyLevel = 10;
|
|
public const int kBeautyExp = 9;
|
|
public const int kStone = 11;
|
|
public const int kBattlePassExp = 12;
|
|
public const int kBattlePassToken = 13;
|
|
public const int kMotility = 17;
|
|
/// <summary>
|
|
/// 好友值
|
|
/// </summary>
|
|
public const int kFriend = 21;
|
|
public const int kLuckyBag = 27;
|
|
|
|
public const int kAdTicket = 33;
|
|
}
|
|
|
|
public static class Type
|
|
{
|
|
public const int Money = 1;
|
|
public const int Prop = 2;
|
|
public const int Weapon = 3;
|
|
public const int Equipment = 4;
|
|
public const int Gem = 6;
|
|
public const int BeautyProp = 8;
|
|
}
|
|
|
|
public static class Quality
|
|
{
|
|
public const int kMin = 1;
|
|
public const int kWhite = 1;
|
|
public const int kGreen = 2;
|
|
public const int kBlue = 3;
|
|
public const int kPurple = 4;
|
|
public const int kYellow = 5;
|
|
public const int kRed = 6;
|
|
public const int kMax = 6;
|
|
}
|
|
|
|
public enum EquipmentType
|
|
{
|
|
Weapon,
|
|
kMax = 6,
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Field
|
|
|
|
public int id
|
|
{
|
|
get;
|
|
protected set;
|
|
}
|
|
|
|
public ItemProp propItem
|
|
{
|
|
get { return ItemProxy.Instance.GetStaticItem<ItemProp>(id); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region MODEL
|
|
|
|
/// <summary>
|
|
/// 物品信息
|
|
/// </summary>
|
|
public struct ItemInfo
|
|
{
|
|
public int id;
|
|
private ObscuredInt _obscuredCount;
|
|
|
|
public int count
|
|
{
|
|
get { return _obscuredCount; }
|
|
set { _obscuredCount = value; }
|
|
}
|
|
|
|
public ItemProp propItem
|
|
{
|
|
get { return ItemProxy.Instance.GetStaticItem<ItemProp>(id); }
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return id;
|
|
}
|
|
|
|
public void Set(int id, int count)
|
|
{
|
|
this.id = id;
|
|
_obscuredCount = count;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="multiple"></param>
|
|
public void Apply(float multiple)
|
|
{
|
|
_obscuredCount = (int)(count * multiple);
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="count"></param>
|
|
public ItemInfo(int id, int count)
|
|
{
|
|
this.id = id;
|
|
_obscuredCount = count;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="count"></param>
|
|
/// <returns></returns>
|
|
public static ItemInfo Create(int id, int count)
|
|
{
|
|
return new ItemInfo { id = id, _obscuredCount = count };
|
|
}
|
|
|
|
public static void FromArray(List<ItemInfo> results, int[] source, int offset = 0)
|
|
{
|
|
if (source != null && source.Length > offset)
|
|
{
|
|
int length = (source.Length - offset) / 2;
|
|
for (int i = 0, j = offset; i < length; i++)
|
|
{
|
|
results.Add(new ItemInfo
|
|
{
|
|
id = source[j++],
|
|
count = source[j++],
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
/// <param name="start"></param>
|
|
/// <returns></returns>
|
|
public static ItemInfo[] FromArray(IList<int> data, int start = 0)
|
|
{
|
|
if (data != null)
|
|
{
|
|
int length = data.Count - start;
|
|
var ret = new ItemInfo[length / 2];
|
|
for (int i = 0, j = start; i < ret.Length; i++)
|
|
{
|
|
ret[i] = new ItemInfo
|
|
{
|
|
id = data[j++],
|
|
count = data[j++],
|
|
};
|
|
}
|
|
return ret;
|
|
}
|
|
else
|
|
{
|
|
return new ItemInfo[0];
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="list"></param>
|
|
/// <returns></returns>
|
|
public static ItemInfo[] FormJsonList(IList<object> list)
|
|
{
|
|
if (list != null)
|
|
{
|
|
var result = new ItemInfo[list.Count];
|
|
for (int i = 0; i < list.Count; i++)
|
|
{
|
|
var info = list.GetDictionary(i);
|
|
result[i] = new ItemInfo
|
|
{
|
|
id = info.GetInt("id"),
|
|
count = info.GetInt("count"),
|
|
};
|
|
}
|
|
return result;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
/// <param name="start"></param>
|
|
/// <returns></returns>
|
|
public static ItemInfo Convert(IList<int> data, int start = 0)
|
|
{
|
|
if (data != null && data.Count > start + 1)
|
|
{
|
|
var ret = new ItemInfo()
|
|
{
|
|
id = data[start],
|
|
count = data[start + 1],
|
|
};
|
|
return ret;
|
|
}
|
|
else
|
|
{
|
|
return new ItemInfo();
|
|
}
|
|
}
|
|
|
|
static readonly Dictionary<int, ItemInfo> _Caches = new Dictionary<int, ItemInfo>();
|
|
/// <summary>
|
|
/// 合并 堆叠
|
|
/// </summary>
|
|
/// <param name="sources"></param>
|
|
/// <param name="results"></param>
|
|
public static void Combine(IList<ItemInfo> sources, List<ItemInfo> results)
|
|
{
|
|
_Caches.Clear();
|
|
for (int i = 0; i < sources.Count; i++)
|
|
{
|
|
var itemInfo = sources[i];
|
|
if (itemInfo.id < 100)
|
|
{
|
|
if (_Caches.TryGetValue(itemInfo.id, out var result))
|
|
{
|
|
result.count += itemInfo.count;
|
|
_Caches[itemInfo.id] = result;
|
|
}
|
|
else
|
|
{
|
|
_Caches.Add(itemInfo.id, itemInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_Caches.Count > 0)
|
|
{
|
|
results.AddRange(_Caches.Values);
|
|
foreach (var itemInfo in sources)
|
|
{
|
|
if (itemInfo.id >= 100)
|
|
{
|
|
results.Add(itemInfo);
|
|
}
|
|
}
|
|
_Caches.Clear();
|
|
}
|
|
else
|
|
{
|
|
results.AddRange(sources);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Method
|
|
|
|
public virtual void Init()
|
|
{
|
|
|
|
}
|
|
|
|
public virtual void Reset()
|
|
{
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Static Helper
|
|
|
|
|
|
private static readonly string[] _QualityTexts = new string[] { "普通", "精良", "卓越", "稀世", "传说", "神话" };
|
|
public static string GetQualityText(int quality)
|
|
{
|
|
if (quality > 0 && quality < 7)
|
|
{
|
|
return _QualityTexts[quality - 1];
|
|
}
|
|
return "";
|
|
}
|
|
|
|
private static readonly Color[] _QualityColors = new Color[]
|
|
{
|
|
new Color32(0x7c, 0x82, 0x88, 255),
|
|
new Color32(0x52, 0xb8, 0x7b, 255),
|
|
new Color32(0x12, 0x8d, 0xff, 255),
|
|
new Color32(0xa0, 0x44, 0xff, 255),
|
|
new Color32(0xff, 0x67, 0x0b, 255),
|
|
new Color32(0xff, 0x00, 0x00, 255)
|
|
};
|
|
|
|
public static Color GetQualityColor(int quality)
|
|
{
|
|
if (quality > 0 && quality < 7)
|
|
{
|
|
return _QualityColors[quality - 1];
|
|
}
|
|
return Color.gray;
|
|
}
|
|
|
|
public static string GetQualityColorString(int quality)
|
|
{
|
|
if (quality > 0 && quality < 7)
|
|
{
|
|
return ColorUtility.ToHtmlStringRGB(_QualityColors[quality - 1]);
|
|
}
|
|
return ColorUtility.ToHtmlStringRGB(Color.gray);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
|