using System; using System.Collections.Generic; using System.IO; using System.Text; using Definition.DataStruct; using Definition.Enum; using GameFramework; using StarForce; using UnityGameFramework.Runtime; namespace DataTable { public class DRRole : DataRowBase { private int m_Id = 0; /// /// 获取角色编号。 /// public override int Id => m_Id; /// /// 获取资源名称。 /// public string RoleName { get; private set; } /// /// 获取图标名称。 /// public string IconName { get; private set; } /// /// 获取初始最大生命。 /// public int MaxHealth { get; private set; } /// /// 获取初始速度。 /// public float Speed { get; private set; } /// /// 获取初始金币。 /// public int Coin { get; private set; } /// /// 获取最大持有武器数。 /// public int WeaponCapacity { get; private set; } /// /// 获取初始属性。 /// public StatModifier[] InitialProperties { get; private set; } /// /// 获取初始物品。 /// public KeyValuePair[] InitialItemIds { get; private set; } public int[] ExpRequires { 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++; RoleName = columnStrings[index++]; IconName = columnStrings[index++]; MaxHealth = int.Parse(columnStrings[index++]); Speed = float.Parse(columnStrings[index++]); Coin = int.Parse(columnStrings[index++]); WeaponCapacity = int.Parse(columnStrings[index++]); InitialProperties = Utility.Json.ToObject(columnStrings[index++]); GenerateItems(columnStrings[index++]); GenerateExpRequires(ref columnStrings, index); GeneratePropertyArray(); return true; } private void GeneratePropertyArray() { } private void GenerateItems(string raw) { if (!raw.StartsWith('[') || !raw.EndsWith(']')) { throw new ArgumentException("Input must be enclosed in square brackets."); } if (raw.Length <= 2) return; string[] items = raw.Substring(1, raw.Length - 2).Split(";"); int length = items.Length; InitialItemIds = new KeyValuePair[length]; for (int i = 0; i < length; i++) { string input = items[i]; if (string.IsNullOrEmpty(input)) { Log.Warning("Invalid item: {0}", input); continue; } if (!input.StartsWith('[') || !input.EndsWith(']')) { throw new ArgumentException("Input must be enclosed in square brackets."); } string inner = input.Substring(1, input.Length - 2); // 如果是空列表 "[]" if (inner.Length == 0) continue; string[] index = inner.Split(","); var item = new KeyValuePair(int.Parse(index[0]), int.Parse(index[1])); InitialItemIds[i] = item; } } private void GenerateExpRequires(ref string[] columnStrings, int index) { List expRequires = new List(); int baseExp = int.Parse(columnStrings[index]); for (int i = index; i < columnStrings.Length; i++) { expRequires.Add(int.Parse(columnStrings[i]) - baseExp); } ExpRequires = expRequires.ToArray(); } } }