686 lines
25 KiB
C#
686 lines
25 KiB
C#
|
|
|||
|
|
|||
|
using Cal;
|
|||
|
using Cal.DataTable;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace ET
|
|||
|
{
|
|||
|
public class BagHelper
|
|||
|
{
|
|||
|
public const int ExpId = 110201;
|
|||
|
public const int YuanBaoId = 110202;
|
|||
|
public const int CoinId = 110203;
|
|||
|
public const int VoucherId = 110204;
|
|||
|
public const int GemId = 110205;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 收集背包信息
|
|||
|
/// </summary>
|
|||
|
/// <param name="unit"></param>
|
|||
|
/// <param name="bagMapList"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static void GetBagInfo(Unit unit, System.Collections.Generic.List<BagMap> bagMapList)
|
|||
|
{
|
|||
|
Bag bag = unit.GetComponent<Bag>();
|
|||
|
foreach (var item in bag.ItemDic.Values)
|
|||
|
{
|
|||
|
if (item.IsEmpty) continue;
|
|||
|
BagMap bagMap = new BagMap
|
|||
|
{
|
|||
|
Index = item.index,
|
|||
|
NetItem = new NetItem(item)
|
|||
|
};
|
|||
|
if (item.ItemType == ItemType.EquipItem)
|
|||
|
{
|
|||
|
bagMap.EquipTransMessage = new EquipTransMessage(item.data.As<EquipItem>());
|
|||
|
}
|
|||
|
bagMapList.Add(bagMap);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static Item GenerateItem(Unit unit, int itemId, int count, bool isLock, Item oldItem, float randomMax, string getSource)
|
|||
|
{
|
|||
|
ItemData itemData = null;
|
|||
|
long serverId = 0;
|
|||
|
ItemType itemType = default;
|
|||
|
var itemBase = BagHelper.GetItemBase(itemId);
|
|||
|
switch (itemBase)
|
|||
|
{
|
|||
|
case EquipBase equipBase:
|
|||
|
serverId = Game.IdGenerater.GenerateId();
|
|||
|
if (oldItem != null)
|
|||
|
itemData = oldItem.data.As<EquipItem>();
|
|||
|
else
|
|||
|
{
|
|||
|
EquipItem equipItem = new EquipItem();
|
|||
|
equipItem.Create(equipBase, unit, randomMax);
|
|||
|
itemData = equipItem;
|
|||
|
}
|
|||
|
itemType = ItemType.EquipItem;
|
|||
|
break;
|
|||
|
case GoodsBase goodsBase:
|
|||
|
if (oldItem != null)
|
|||
|
itemData = oldItem.data.As<GoodsItem>();
|
|||
|
else
|
|||
|
{
|
|||
|
GoodsItem equipItem = new GoodsItem();
|
|||
|
equipItem.Create(goodsBase);
|
|||
|
itemData = equipItem;
|
|||
|
}
|
|||
|
itemType = ItemType.GoodsItem;
|
|||
|
break;
|
|||
|
case MaterialBase materialBase:
|
|||
|
if (oldItem != null)
|
|||
|
itemData = oldItem.data.As<MaterialItem>();
|
|||
|
else
|
|||
|
{
|
|||
|
MaterialItem equipItem = new MaterialItem();
|
|||
|
equipItem.Create(materialBase);
|
|||
|
itemData = equipItem;
|
|||
|
}
|
|||
|
itemType = ItemType.MaterialsItem;
|
|||
|
break;
|
|||
|
}
|
|||
|
Item item = new Item(itemData)
|
|||
|
{
|
|||
|
ItemId = itemId,
|
|||
|
Count = count,
|
|||
|
ItemType = itemType,
|
|||
|
IsLock = isLock,
|
|||
|
ServerId = serverId,
|
|||
|
getSource = getSource
|
|||
|
};
|
|||
|
return item;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 收集装备栏信息
|
|||
|
/// </summary>
|
|||
|
/// <param name="unit"></param>
|
|||
|
/// <param name="bagMapList"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static void GetWornEquipInfo(Unit unit, System.Collections.Generic.List<BagMap> bagMapList)
|
|||
|
{
|
|||
|
Bag bag = unit.GetComponent<Bag>();
|
|||
|
foreach (var item in bag.WornEquipDic.Values)
|
|||
|
{
|
|||
|
BagMap bagMap = new BagMap
|
|||
|
{
|
|||
|
Index = item.index,
|
|||
|
NetItem = new NetItem(item)
|
|||
|
};
|
|||
|
if (item.ItemType == ItemType.EquipItem)
|
|||
|
{
|
|||
|
bagMap.EquipTransMessage = new EquipTransMessage(item.data.As<EquipItem>());
|
|||
|
}
|
|||
|
bagMapList.Add(bagMap);
|
|||
|
}
|
|||
|
}
|
|||
|
public static string CanUseGoods(Unit unit, Item item)
|
|||
|
{
|
|||
|
if (!unit.IsAlive)
|
|||
|
{
|
|||
|
return "您当前处于死亡状态";
|
|||
|
}
|
|||
|
GoodsBase goodsBase = DataTableHelper.Get<GoodsBase>(item.ItemId);
|
|||
|
if (goodsBase == null)
|
|||
|
{
|
|||
|
Log.Error($"【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】的物品Id = {item.ItemId}在表格中不存在");
|
|||
|
return "系统错误";
|
|||
|
}
|
|||
|
var num = unit.GetComponent<NumericComponent>();
|
|||
|
if (num.GetAsInt(NumericType.Level) < goodsBase.UsedLevel)
|
|||
|
{
|
|||
|
return "使用等级不足!";
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
public static string UseGoodsEffect(Unit unit, Item item)
|
|||
|
{
|
|||
|
GoodsBase goodsBase = DataTableHelper.Get<GoodsBase>(item.ItemId);
|
|||
|
if (goodsBase == null)
|
|||
|
{
|
|||
|
Log.Error($"【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】的物品Id = {item.ItemId}在表格中不存在");
|
|||
|
return "系统错误";
|
|||
|
}
|
|||
|
return GoodsEffectComponent.Instance.AcquireGoodsEffect(unit, goodsBase, item.IsLock);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public static ItemType GetItemType(int itemId)
|
|||
|
{
|
|||
|
if (itemId == 0) return ItemType.NoneItem;
|
|||
|
if (itemId < 110000)
|
|||
|
{
|
|||
|
return ItemType.MaterialsItem;
|
|||
|
|
|||
|
}
|
|||
|
if (itemId < 120000)
|
|||
|
{
|
|||
|
return ItemType.GoodsItem;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return ItemType.EquipItem;
|
|||
|
}
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 根据Id获取物品类型(自行判断类型)
|
|||
|
/// </summary>
|
|||
|
/// <param name="id"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static IConfig GetItemBase(int id)
|
|||
|
{
|
|||
|
if (id == 0) return null;
|
|||
|
IConfig config;
|
|||
|
if (id < 110000)
|
|||
|
{
|
|||
|
config = DataTableHelper.Get<MaterialBase>(id);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (id < 120000)
|
|||
|
{
|
|||
|
config = DataTableHelper.Get<GoodsBase>(id);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
config = DataTableHelper.Get<EquipBase>(id);
|
|||
|
}
|
|||
|
}
|
|||
|
if (config == null)
|
|||
|
throw new Exception($"id is invalid :{id}");
|
|||
|
return config;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取背包物品的名字
|
|||
|
/// </summary>
|
|||
|
/// <param name="id"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string GetName(int id)
|
|||
|
{
|
|||
|
if (id == 0) return null;
|
|||
|
if (id < 110000)
|
|||
|
{
|
|||
|
var materialBase = DataTableHelper.Get<MaterialBase>(id);
|
|||
|
return materialBase.Name;
|
|||
|
|
|||
|
}
|
|||
|
if (id < 120000)
|
|||
|
{
|
|||
|
var goodsBase = DataTableHelper.Get<GoodsBase>(id);
|
|||
|
return goodsBase.Name;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var equipBase = DataTableHelper.Get<EquipBase>(id);
|
|||
|
return equipBase.Name;
|
|||
|
}
|
|||
|
}
|
|||
|
public static string AddItem(Unit unit, int id, long count, bool isLock, Item equip = null, float randomMax = ConstDefine.EquipMaxRandom, string getSource = "未知")
|
|||
|
{
|
|||
|
var num = unit.GetComponent<NumericComponent>();
|
|||
|
switch ((SpecialGoodsType)id)
|
|||
|
{
|
|||
|
case SpecialGoodsType.Exp:
|
|||
|
num.AddSet(NumericType.Exp, count);
|
|||
|
return null;
|
|||
|
case SpecialGoodsType.Coin:
|
|||
|
num.AddSet(NumericType.Coin, count);
|
|||
|
return null;
|
|||
|
case SpecialGoodsType.Voucher:
|
|||
|
num.AddSet(NumericType.Voucher, (int)count);
|
|||
|
VoucherLogComponent.instance.AddInfo(unit.Id, $"{getSource} 获得了:{count}");
|
|||
|
return null;
|
|||
|
case SpecialGoodsType.YuanBao:
|
|||
|
num.AddSet(NumericType.YuanBao, (int)count);
|
|||
|
YuanBaoLogComponent.instance.AddInfo(unit.Id, $"{getSource} 获得了:{count}");
|
|||
|
return null;
|
|||
|
case SpecialGoodsType.Gem:
|
|||
|
num.AddSet(NumericType.Gem, count);
|
|||
|
return null;
|
|||
|
}
|
|||
|
int _count = (int)count;
|
|||
|
string ret = ItemComponent.Instance.AddItem(unit, id, _count, isLock, equip, randomMax, getSource: getSource);
|
|||
|
if (ret != string.Empty)
|
|||
|
return ret;
|
|||
|
return null;
|
|||
|
}
|
|||
|
public static bool HasItem(Unit unit, int id, int count)
|
|||
|
{
|
|||
|
Bag bag = unit.GetComponent<Bag>();
|
|||
|
return HasItem(bag, id, count);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public static bool HasItem(Bag bag, int id, int count, bool needUnlocked = false)
|
|||
|
{
|
|||
|
if (!bag.ItemDic.TryGetValueByKey2(id, out var materialList) || materialList.Count == 0)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
int materialCount = 0;
|
|||
|
foreach (var item in materialList)
|
|||
|
{
|
|||
|
if (materialCount >= count) break;
|
|||
|
if (needUnlocked && item.IsLock) continue;
|
|||
|
materialCount += item.Count;
|
|||
|
}
|
|||
|
if (materialCount < count)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
|
|||
|
}
|
|||
|
public static bool HasItem(Bag bag, int id, int count, out bool hasLock)
|
|||
|
{
|
|||
|
hasLock = false;
|
|||
|
if (!bag.ItemDic.TryGetValueByKey2(id, out var materialList) || materialList.Count == 0)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
int materialCount = 0;
|
|||
|
foreach (var item in materialList)
|
|||
|
{
|
|||
|
if (materialCount >= count) break;
|
|||
|
materialCount += item.Count;
|
|||
|
hasLock = hasLock || item.IsLock;
|
|||
|
}
|
|||
|
if (materialCount < count)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public enum GoodAutoUseType
|
|||
|
{
|
|||
|
Exp,
|
|||
|
Hp,
|
|||
|
Mp,
|
|||
|
}
|
|||
|
internal static void UserGoods(Bag bag, GoodAutoUseType type)
|
|||
|
{
|
|||
|
int[] arr = null;
|
|||
|
switch (type)
|
|||
|
{
|
|||
|
case GoodAutoUseType.Exp:
|
|||
|
arr = ConstDefine.ExpGoodsIdArr;
|
|||
|
break;
|
|||
|
case GoodAutoUseType.Hp:
|
|||
|
arr = ConstDefine.HpGoodsIdArr;
|
|||
|
break;
|
|||
|
case GoodAutoUseType.Mp:
|
|||
|
arr = ConstDefine.MpGoodsIdArr;
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
if (arr == null) return;
|
|||
|
foreach (var itemId in arr)
|
|||
|
{
|
|||
|
if (!bag.ItemDic.TryGetValueByKey2(itemId, out var list) || list.Count == 0)
|
|||
|
continue;
|
|||
|
Item item = list[0];
|
|||
|
var unit = bag.GetParent<Unit>();
|
|||
|
var ret = BagHelper.CanUseGoods(unit, item);
|
|||
|
if (ret != null)
|
|||
|
continue;
|
|||
|
//!消耗物品
|
|||
|
DeleteItem(unit, item.ItemId, 1);
|
|||
|
//!使用逻辑
|
|||
|
BagHelper.UseGoodsEffect(unit, item);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
internal static async ETVoid AutoMoveItemToStore(Bag bag, int count)
|
|||
|
{
|
|||
|
Store store = await StoreComponent.Instance.Query(bag.Id);
|
|||
|
for (int index = bag.MaxItemCount - count; index < bag.MaxItemCount; index++)
|
|||
|
{
|
|||
|
if (bag.ItemDic.TryGetValueByKey1(index, out var item) && !item.IsEmpty )
|
|||
|
{
|
|||
|
bag.DeleteItem(index, item.Count);
|
|||
|
store.AddItem(item);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void DeleteItem(Bag bag, int id, int count)
|
|||
|
{
|
|||
|
|
|||
|
bag.DeleteMultiItem(id, count);
|
|||
|
}
|
|||
|
public static void DeleteItem(Unit unit, int id, long count)
|
|||
|
{
|
|||
|
var num = unit.GetComponent<NumericComponent>();
|
|||
|
switch ((SpecialGoodsType)id)
|
|||
|
{
|
|||
|
case SpecialGoodsType.Exp:
|
|||
|
num.ReduceSet(NumericType.Exp, count);
|
|||
|
return;
|
|||
|
case SpecialGoodsType.Coin:
|
|||
|
num.ReduceSet(NumericType.Coin, count);
|
|||
|
return;
|
|||
|
case SpecialGoodsType.Voucher:
|
|||
|
num.ReduceSet(NumericType.Voucher, (int)count);
|
|||
|
return;
|
|||
|
case SpecialGoodsType.YuanBao:
|
|||
|
num.ReduceSet(NumericType.YuanBao, (int)count);
|
|||
|
return;
|
|||
|
case SpecialGoodsType.Gem:
|
|||
|
num.ReduceSet(NumericType.Gem, count);
|
|||
|
return;
|
|||
|
}
|
|||
|
Bag bag = unit.GetComponent<Bag>();
|
|||
|
DeleteItem(bag, id, (int)count);
|
|||
|
}
|
|||
|
|
|||
|
internal static async ETTask UpdateEquip()
|
|||
|
{
|
|||
|
var bagList = await DBComponent.Instance.QueryJson<Bag>("{}");
|
|||
|
foreach (var bag in bagList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
bool isRequired = false;
|
|||
|
foreach (var kv in bag.WornEquipDic)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
Item item = kv.Value;
|
|||
|
if (item.ItemType == ItemType.EquipItem)
|
|||
|
{
|
|||
|
isRequired = true;
|
|||
|
await ChangAttribute(bag.Id, item);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
foreach (var kv in bag.ItemDic)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
Item item = kv.Value;
|
|||
|
if (item.ItemType == ItemType.EquipItem)
|
|||
|
{
|
|||
|
isRequired = true;
|
|||
|
await ChangAttribute(bag.Id, item);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
if (isRequired)
|
|||
|
{
|
|||
|
Unit unit = MapUnitComponent.Instance.Get(bag.Id);
|
|||
|
if (unit != null)
|
|||
|
{
|
|||
|
unit.RemoveComponent<Bag>();
|
|||
|
unit.AddComponent(bag);
|
|||
|
}
|
|||
|
await DBComponent.Instance.Save(bag);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
Log.Info($"bag结束");
|
|||
|
|
|||
|
var list = await DBComponent.Instance.QueryJson<Store>("{}");
|
|||
|
foreach (var store in list)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
bool isRequired = false;
|
|||
|
foreach (var kv in store.StoreDic)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
Item item = kv.Value;
|
|||
|
if (item.ItemType == ItemType.EquipItem)
|
|||
|
{
|
|||
|
isRequired = true;
|
|||
|
await ChangAttribute(store.Id, item);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
if (isRequired)
|
|||
|
{
|
|||
|
var _store = await StoreComponent.Instance.Query(store.Id);
|
|||
|
if (_store != null)
|
|||
|
{
|
|||
|
_store = store;
|
|||
|
}
|
|||
|
await DBComponent.Instance.Save(store);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
Log.Info($"store结束");
|
|||
|
|
|||
|
var mailList = await DBComponent.Instance.QueryJson<MailLib>("{}");
|
|||
|
foreach (var mailLib in mailList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
bool isRequired = false;
|
|||
|
foreach (var mail in mailLib.Dic.Values)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
foreach (var mailItem in mail.RewordArr)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (mailItem.IsHasItem)
|
|||
|
{
|
|||
|
Item item = mailItem.Item;
|
|||
|
if (item.ItemType == ItemType.EquipItem)
|
|||
|
{
|
|||
|
isRequired = true;
|
|||
|
await ChangAttribute(mailLib.Id, item);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
if (isRequired)
|
|||
|
{
|
|||
|
await DBComponent.Instance.Save(mailLib);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
Log.Info($"mail结束");
|
|||
|
var consignmentList = await DBComponent.Instance.QueryJson<Consignment>("{}");
|
|||
|
foreach (var consignment in consignmentList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
bool isRequired = false;
|
|||
|
if (consignment.Item.ItemType == ItemType.EquipItem)
|
|||
|
{
|
|||
|
isRequired = true;
|
|||
|
await ChangAttribute(consignment.UnitId, consignment.Item);
|
|||
|
}
|
|||
|
if (isRequired)
|
|||
|
{
|
|||
|
var _store = await ConsignmentComponent.Instance.QueryById(consignment.Id);
|
|||
|
if (_store != null)
|
|||
|
{
|
|||
|
_store = consignment;
|
|||
|
}
|
|||
|
await DBComponent.Instance.Save(consignment);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
Log.Info($"全部结束");
|
|||
|
static async ETTask ChangAttribute(long id, Item item)
|
|||
|
{
|
|||
|
Item _item;
|
|||
|
User user = await DBComponent.Instance.Query<User>(id);
|
|||
|
if (user == null)
|
|||
|
{
|
|||
|
Log.Error($"user == null where id = {id}");
|
|||
|
_item = GenerateEquip(1, item.ItemId, item.Count, item.IsLock, null, ConstDefine.EquipMaxRandom, item.getSource);
|
|||
|
}
|
|||
|
_item = GenerateEquip(user.Level, item.ItemId, item.Count, item.IsLock, null, ConstDefine.EquipMaxRandom, item.getSource);
|
|||
|
var list = item.data.As<EquipItem>().gemList;
|
|||
|
item.data = _item.data;
|
|||
|
foreach (var gemId in list)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
await MailHelper.AddItem(id, gemId, 1, true, "", "系统强制拆除", "宝石位置发生改变,强制拆除所有宝石", "系统");
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
Log.Error(e);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private static float GetEquipAttribute(float baseA, float newA)
|
|||
|
{
|
|||
|
if (baseA == 0)
|
|||
|
baseA = float.Epsilon;
|
|||
|
return (newA - baseA) / baseA;
|
|||
|
}
|
|||
|
private static float GetEuqipBaseData(AttributeType attributeType, EquipBase equipBase)
|
|||
|
{
|
|||
|
switch (attributeType)
|
|||
|
{
|
|||
|
case AttributeType.无:
|
|||
|
return 0;
|
|||
|
case AttributeType.最大生命:
|
|||
|
return equipBase.Hp;
|
|||
|
case AttributeType.最大精力:
|
|||
|
return equipBase.Mp;
|
|||
|
case AttributeType.力量:
|
|||
|
return equipBase.Str;
|
|||
|
case AttributeType.敏捷:
|
|||
|
return equipBase.Quk;
|
|||
|
case AttributeType.精神:
|
|||
|
return equipBase.Spi;
|
|||
|
case AttributeType.智慧:
|
|||
|
return equipBase.Wim;
|
|||
|
case AttributeType.物理攻击:
|
|||
|
return equipBase.PhyAtk;
|
|||
|
case AttributeType.精神攻击:
|
|||
|
return equipBase.SpiAtk;
|
|||
|
case AttributeType.物理防御:
|
|||
|
return equipBase.PhyDef;
|
|||
|
case AttributeType.精神防御:
|
|||
|
return equipBase.SpiDef;
|
|||
|
case AttributeType.物理暴击系数:
|
|||
|
return equipBase.Pcrir;
|
|||
|
case AttributeType.精神暴击系数:
|
|||
|
return equipBase.Mcrir;
|
|||
|
case AttributeType.物理暴击效果:
|
|||
|
return equipBase.Pcri;
|
|||
|
case AttributeType.精神暴击效果:
|
|||
|
return equipBase.Mcri;
|
|||
|
case AttributeType.抗物理暴击系数:
|
|||
|
return equipBase.Rpcrir;
|
|||
|
case AttributeType.抗精神暴击系数:
|
|||
|
return equipBase.Rmcrir;
|
|||
|
case AttributeType.抗物理暴击效果:
|
|||
|
return equipBase.Rpcri;
|
|||
|
case AttributeType.抗精神暴击效果:
|
|||
|
return equipBase.Rmcri;
|
|||
|
case AttributeType.辅助值:
|
|||
|
return equipBase.Dvo;
|
|||
|
case AttributeType.体质:
|
|||
|
return equipBase.Phy;
|
|||
|
case AttributeType.耐力:
|
|||
|
return equipBase.Sta;
|
|||
|
case AttributeType.物理免伤:
|
|||
|
return equipBase.Nphyi;
|
|||
|
case AttributeType.精神免伤:
|
|||
|
return equipBase.Nmeni;
|
|||
|
case AttributeType.速度:
|
|||
|
return equipBase.Spd;
|
|||
|
case AttributeType.命中:
|
|||
|
return equipBase.Hit;
|
|||
|
case AttributeType.抵抗:
|
|||
|
return equipBase.Res;
|
|||
|
default:
|
|||
|
return 0;
|
|||
|
}
|
|||
|
}
|
|||
|
public static Item GenerateEquip(int level, int itemId, int count, bool isLock, Item oldItem, float randomMax, string getSource)
|
|||
|
{
|
|||
|
ItemData itemData = null;
|
|||
|
long serverId = 0;
|
|||
|
ItemType itemType = default;
|
|||
|
var itemBase = BagHelper.GetItemBase(itemId);
|
|||
|
switch (itemBase)
|
|||
|
{
|
|||
|
case EquipBase equipBase:
|
|||
|
serverId = Game.IdGenerater.GenerateId();
|
|||
|
if (oldItem != null)
|
|||
|
itemData = oldItem.data.As<EquipItem>();
|
|||
|
else
|
|||
|
{
|
|||
|
EquipItem equipItem = new EquipItem();
|
|||
|
equipItem.Create(equipBase, level, randomMax);
|
|||
|
itemData = equipItem;
|
|||
|
}
|
|||
|
itemType = ItemType.EquipItem;
|
|||
|
break;
|
|||
|
}
|
|||
|
Item item = new(itemData)
|
|||
|
{
|
|||
|
ItemId = itemId,
|
|||
|
Count = count,
|
|||
|
ItemType = itemType,
|
|||
|
IsLock = isLock,
|
|||
|
ServerId = serverId,
|
|||
|
getSource = getSource,
|
|||
|
};
|
|||
|
return item;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|