Main/Assets/Code/Logic/MonsterSoul/MonsterSoulEquipData.cs
2025-01-25 04:38:09 +08:00

231 lines
6.1 KiB
C#

using Thousandto.Cfg.Data;
using Thousandto.Code.Center;
using Thousandto.Code.Global;
using Thousandto.Plugins.Common;
using System.Collections.Generic;
using UnityEngine;
using XLua;
namespace Thousandto.Code.Logic
{
//兽魂装备数据
public class MonsterSoulEquipData: ItemModel
{
//public string Name { get; set; }
//public int CfgID { get; set; }
//public ulong DBID { get; set; }
//隶属的兽魂,为-1表示在背包
public int MonsterId { get; set; }
//物品等级
private int _level;
public int Level
{
get
{ return _level; }
set
{
if(_level != value)
{
_level = value;
Refresh();
}
}
}
//强化等级
public int StrengthLevel { get { return Level; } }
//当前经验 用于强化升级
public int Exp { get; set; }
//装备部位(1头盔、2项圈、3铠甲、4利爪、5羽翼)
//public int Location { get {
// return Config.Part;
// } set { } }
//是否强化材料
public bool IsMaterial { get; set; }
//物品类型
public override int GetItemType()
{
if (IsMaterial)
return ItemType.MonsterSoulMaterial;
else
return ItemType.MonsterSoulEquip;
}
//部位
public override int GetPart()
{
var ret = 0;
if (Config != null)
ret = Config.Part;
return ret;
}
public override int GetQuality()
{
int ret = -1;
if (Config != null && !IsMaterial)
ret = Config.Quality;
else
ret = ItemInfo.Color;
return ret;
}
public override int GetStarNum()
{
int ret = -1;
if (Config != null)
ret = Config.DiamondNumber;
return ret;
}
//战力
private uint _score;
public uint Score
{
get
{
if(_score == 0)
{
//_score = FightPowerHelper.GetPropetryPower(GetTotalAttrByLevel());
_score = FightPowerHelper.GetPropetryPower(GetAttrsForFightPower());
//多一颗星就多100战力
//if (Star > 0)
// _score += (uint)((Star - 1) * 100);
}
return _score;
}
}
private DeclareSoulBeastsEquip _config;
public DeclareSoulBeastsEquip Config
{
get
{
if (_config == null)
{
if (!IsMaterial)
{
_config = DeclareSoulBeastsEquip.Get(CfgID);
}
}
return _config;
}
}
private Dictionary<int, AttribuiteData> _baseAttr;
public Dictionary<int, AttribuiteData> BaseAttr
{
get
{
if(_baseAttr == null)
{
_baseAttr = new Dictionary<int, AttribuiteData>();
if (!string.IsNullOrEmpty(Config.Attribute1))
{
var attrs = Config.Attribute1.Split(';');
for (int i = 0; i < attrs.Length; ++i)
{
var data = AttribuiteData.Parse(attrs[i]);
_baseAttr.Add(data.AttrId, data);
}
}
}
return _baseAttr;
}
}
//获取指定等级增加的属性列表
public Dictionary<int, AttribuiteData> GetAddUpAttrByLevel(int level)
{
if (level > 0)
{
int id = GetEquipLevelConfigID(level);
var config = DeclareSoulBeastsEquipLevel.Get(id);
if (config != null && !string.IsNullOrEmpty(config.Att))
{
return AttribuiteData.ParseListToDict(config.Att);
}
}
return null;
}
//SoulBeastEquipLevel.xls
public int GetEquipLevelConfigID(int level)
{
return Part * 10000 + level;
}
//获取用于战力计算的属性
public Dictionary<int, AttribuiteData> GetAttrsForFightPower()
{
Dictionary<int, AttribuiteData> ret = new Dictionary<int, AttribuiteData>();
//基础属性的战力
var itor = BaseAttr.GetEnumerator();
while(itor.MoveNext())
{
ret.Add(itor.Current.Key, AttribuiteData.ParseWithThis(itor.Current.Value));
}
var strengAtt = GetAddUpAttrByLevel(StrengthLevel);
if (strengAtt != null)
{
var e = strengAtt.GetEnumerator();
while (e.MoveNext())
{
if (ret.ContainsKey(e.Current.Key))
{
ret[e.Current.Key].AttrValue += e.Current.Value.AttrValue;
}
else
{
ret.Add(e.Current.Key, e.Current.Value);
}
}
}
return ret;
}
//当有属性改变时,需要刷新数据
public void Refresh()
{
_score = 0;
_baseAttr = null;
}
#region//构造函数
public MonsterSoulEquipData(int cfgId, ulong dbid = 0)
:base(cfgId,dbid)
{
Count = 1;
if (ItemInfo != null && ItemInfo.Type == (int)ItemType.MonsterSoulMaterial)
IsMaterial = true;
else
IsMaterial = false;
}
public MonsterSoulEquipData(MSG_backpack.ItemInfo info)
:base(info)
{
Count = 1;
}
public MonsterSoulEquipData(ItemModel info)
:base(info)
{
Count = 1;
}
#endregion
}
}