using System; using System.Collections.Generic; using Definition.DataStruct; using Definition.Enum; using GameFramework; using CustomUtility; using Newtonsoft.Json.Linq; using UnityEngine; using UnityGameFramework.Runtime; namespace DataTable { /// /// 武器表。 /// public class DRWeapon : DataRowBase { private int m_Id = 0; /// /// 获取武器编号。 /// public override int Id => m_Id; public int EntityTypeId { get; private set; } /// /// 获取武器名称。 /// public string Title { get; private set; } /// /// 获取图标资源名称。 /// public string IconAssetName { get; private set; } /// /// 获取武器稀有度 /// public ItemRarity Rarity { get; private set; } /// /// 获取武器价值 /// public int Price { get; private set; } /// /// 获取武器价值浮动率 /// public float PriceRandomPercent { get; private set; } /// /// 获取武器伤害。 /// public int Attack { get; private set; } /// /// 获取武器冷却。 /// public float Cooldown { get; private set; } /// /// 获取武器攻击范围。 /// public float AttackRange { get; private set; } /// /// 获取武器攻击音效。 /// public int AttackSoundId { get; private set; } /// /// 获取武器额外参数。 /// public Dictionary Pramas { get; private set; } /// /// 获取武器额外参数 Json。 /// public string ParamsJson { get; private set; } /// /// 获取武器额外属性。 /// public StatModifier[] Modifiers { get; private set; } public override bool ParseDataRow(string dataRowString, object userData) { string[] columnStrings = dataRowString.Split(DataTableExtension.DataSplitSeparators); int index = 0; index++; m_Id = int.Parse(columnStrings[index++]); index++; EntityTypeId = int.Parse(columnStrings[index++]); Title = columnStrings[index++]; IconAssetName = columnStrings[index++]; Rarity = EnumUtility.Get(columnStrings[index++]); Price = int.Parse(columnStrings[index++]); PriceRandomPercent = float.Parse(columnStrings[index++]); Attack = int.Parse(columnStrings[index++]); Cooldown = float.Parse(columnStrings[index++]); AttackRange = float.Parse(columnStrings[index++]); AttackSoundId = int.Parse(columnStrings[index++]); ParamsJson = columnStrings[index++]; Pramas = DeserializeParams(ParamsJson); Modifiers = Utility.Json.ToObject(columnStrings[index++]); GeneratePropertyArray(); return true; } private void GeneratePropertyArray() { } /// /// 解参数 /// /// /// private Dictionary DeserializeParams(string rawParams) { var dict = new Dictionary(); if (string.IsNullOrWhiteSpace(rawParams)) { return dict; } try { JObject paramObject = Utility.Json.ToObject(rawParams); if (paramObject == null) { return dict; } foreach (var pair in paramObject) { if (string.IsNullOrWhiteSpace(pair.Key) || pair.Value == null) { continue; } dict[pair.Key.ToLower()] = pair.Value.ToString(); } } catch (Exception exception) { Log.Warning("Failed to parse weapon params json '{0}'. Error: {1}", rawParams, exception.Message); } return dict; } } }