| | |
| | | {
|
| | |
|
| | | public readonly int NPCID;
|
| | | public readonly int NPCType;
|
| | | public readonly string MODE;
|
| | | public readonly string charName;
|
| | | public readonly int NPCLV;
|
| | | public readonly float ModleHeight;
|
| | | public readonly float ModelRadius;
|
| | | public readonly float ModeProportion;
|
| | | public readonly Vector3 UIModeLOffset;
|
| | | public readonly float UIModeLProportion;
|
| | | public readonly Vector3 UIModelRotation;
|
| | | public readonly int CanDeadFly;
|
| | | public readonly int Country;
|
| | | public readonly int MinAtk;
|
| | | public readonly int MaxAtk;
|
| | | public readonly int Def;
|
| | | public readonly int Realm;
|
| | | public readonly int PoisionAtk;
|
| | | public readonly int FireAtk;
|
| | | public readonly int IceAtk;
|
| | | public readonly int PoisionDef;
|
| | | public readonly int IceDef;
|
| | | public readonly int AtkInterval;
|
| | | public readonly int Hit;
|
| | | public readonly int MissRate;
|
| | | public readonly int SuperHiteRate;
|
| | | public readonly int OrgSpeed;
|
| | | public readonly int MoveType;
|
| | | public readonly int AtkDist;
|
| | | public readonly int Skill1;
|
| | | public readonly int Skill2;
|
| | | public readonly int Skill3;
|
| | | public readonly int Skill4;
|
| | | public readonly int Skill5;
|
| | | public readonly int Skill6;
|
| | | public readonly int Skill7;
|
| | | public readonly int Skill8;
|
| | | public readonly int AtkType;
|
| | | public readonly int Sight;
|
| | | public readonly int MoveArea;
|
| | | public readonly int DHP;
|
| | | public readonly int MaxHPEx;
|
| | | public readonly int IsBoss;
|
| | | public readonly int SP;
|
| | | public readonly int AIType;
|
| | | public readonly int CanAttack;
|
| | | public readonly float weight;
|
| | | public readonly string HeadPortrait;
|
| | | public readonly int Show;
|
| | | public readonly int AtkFeedback;
|
| | | public readonly int hurtFeedback;
|
| | | public readonly int AutomaticFace;
|
| | | public readonly int Dig;
|
| | | public readonly int[] Sounds;
|
| | | public readonly int LifeBarCount;
|
| | | public readonly int NPCEffect;
|
| | | public readonly int NPCSpeakID;
|
| | | public readonly int ClientRealm;
|
| | | public readonly string Equips;
|
| | | public readonly int NPCType;
|
| | | public readonly string MODE;
|
| | | public readonly string charName;
|
| | | public readonly int NPCLV;
|
| | | public readonly float ModleHeight;
|
| | | public readonly float ModelRadius;
|
| | | public readonly float ModeProportion;
|
| | | public readonly Vector3 UIModeLOffset;
|
| | | public readonly float UIModeLProportion;
|
| | | public readonly Vector3 UIModelRotation;
|
| | | public readonly int CanDeadFly;
|
| | | public readonly int Country;
|
| | | public readonly int MinAtk;
|
| | | public readonly int MaxAtk;
|
| | | public readonly int Def;
|
| | | public readonly int Realm;
|
| | | public readonly int PoisionAtk;
|
| | | public readonly int FireAtk;
|
| | | public readonly int IceAtk;
|
| | | public readonly int PoisionDef;
|
| | | public readonly int IceDef;
|
| | | public readonly int AtkInterval;
|
| | | public readonly int Hit;
|
| | | public readonly int MissRate;
|
| | | public readonly int SuperHiteRate;
|
| | | public readonly int OrgSpeed;
|
| | | public readonly int MoveType;
|
| | | public readonly int AtkDist;
|
| | | public readonly int Skill1;
|
| | | public readonly int Skill2;
|
| | | public readonly int Skill3;
|
| | | public readonly int Skill4;
|
| | | public readonly int Skill5;
|
| | | public readonly int Skill6;
|
| | | public readonly int Skill7;
|
| | | public readonly int Skill8;
|
| | | public readonly int AtkType;
|
| | | public readonly int Sight;
|
| | | public readonly int MoveArea;
|
| | | public readonly int DHP;
|
| | | public readonly int MaxHPEx;
|
| | | public readonly int IsBoss;
|
| | | public readonly int SP;
|
| | | public readonly int AIType;
|
| | | public readonly int CanAttack;
|
| | | public readonly float weight;
|
| | | public readonly string HeadPortrait;
|
| | | public readonly int Show;
|
| | | public readonly int AtkFeedback;
|
| | | public readonly int hurtFeedback;
|
| | | public readonly int AutomaticFace;
|
| | | public readonly int Dig;
|
| | | public readonly int[] Sounds;
|
| | | public readonly int LifeBarCount;
|
| | | public readonly int NPCEffect;
|
| | | public readonly int NPCSpeakID;
|
| | | public readonly int ClientRealm;
|
| | | public readonly string Equips;
|
| | |
|
| | | public NPCConfig()
|
| | | public NPCConfig()
|
| | | {
|
| | | }
|
| | |
|
| | |
| | | {
|
| | | var tables = input.Split('\t');
|
| | |
|
| | | int.TryParse(tables[0],out NPCID); |
| | | int.TryParse(tables[0], out NPCID);
|
| | |
|
| | | int.TryParse(tables[1],out NPCType); |
| | | int.TryParse(tables[1], out NPCType);
|
| | |
|
| | | MODE = tables[2];
|
| | | MODE = tables[2];
|
| | |
|
| | | charName = tables[3];
|
| | | charName = tables[3];
|
| | |
|
| | | int.TryParse(tables[4],out NPCLV); |
| | | int.TryParse(tables[4], out NPCLV);
|
| | |
|
| | | float.TryParse(tables[5],out ModleHeight); |
| | | float.TryParse(tables[5], out ModleHeight);
|
| | |
|
| | | float.TryParse(tables[6],out ModelRadius); |
| | | float.TryParse(tables[6], out ModelRadius);
|
| | |
|
| | | float.TryParse(tables[7],out ModeProportion); |
| | | float.TryParse(tables[7], out ModeProportion);
|
| | |
|
| | | UIModeLOffset=tables[8].Vector3Parse();
|
| | | UIModeLOffset = tables[8].Vector3Parse();
|
| | |
|
| | | float.TryParse(tables[9],out UIModeLProportion); |
| | | float.TryParse(tables[9], out UIModeLProportion);
|
| | |
|
| | | UIModelRotation=tables[10].Vector3Parse();
|
| | | UIModelRotation = tables[10].Vector3Parse();
|
| | |
|
| | | int.TryParse(tables[11],out CanDeadFly); |
| | | int.TryParse(tables[11], out CanDeadFly);
|
| | |
|
| | | int.TryParse(tables[12],out Country); |
| | | int.TryParse(tables[12], out Country);
|
| | |
|
| | | int.TryParse(tables[13],out MinAtk); |
| | | int.TryParse(tables[13], out MinAtk);
|
| | |
|
| | | int.TryParse(tables[14],out MaxAtk); |
| | | int.TryParse(tables[14], out MaxAtk);
|
| | |
|
| | | int.TryParse(tables[15],out Def); |
| | | int.TryParse(tables[15], out Def);
|
| | |
|
| | | int.TryParse(tables[16],out Realm); |
| | | int.TryParse(tables[16], out Realm);
|
| | |
|
| | | int.TryParse(tables[17],out PoisionAtk); |
| | | int.TryParse(tables[17], out PoisionAtk);
|
| | |
|
| | | int.TryParse(tables[18],out FireAtk); |
| | | int.TryParse(tables[18], out FireAtk);
|
| | |
|
| | | int.TryParse(tables[19],out IceAtk); |
| | | int.TryParse(tables[19], out IceAtk);
|
| | |
|
| | | int.TryParse(tables[20],out PoisionDef); |
| | | int.TryParse(tables[20], out PoisionDef);
|
| | |
|
| | | int.TryParse(tables[21],out IceDef); |
| | | int.TryParse(tables[21], out IceDef);
|
| | |
|
| | | int.TryParse(tables[22],out AtkInterval); |
| | | int.TryParse(tables[22], out AtkInterval);
|
| | |
|
| | | int.TryParse(tables[23],out Hit); |
| | | int.TryParse(tables[23], out Hit);
|
| | |
|
| | | int.TryParse(tables[24],out MissRate); |
| | | int.TryParse(tables[24], out MissRate);
|
| | |
|
| | | int.TryParse(tables[25],out SuperHiteRate); |
| | | int.TryParse(tables[25], out SuperHiteRate);
|
| | |
|
| | | int.TryParse(tables[26],out OrgSpeed); |
| | | int.TryParse(tables[26], out OrgSpeed);
|
| | |
|
| | | int.TryParse(tables[27],out MoveType); |
| | | int.TryParse(tables[27], out MoveType);
|
| | |
|
| | | int.TryParse(tables[28],out AtkDist); |
| | | int.TryParse(tables[28], out AtkDist);
|
| | |
|
| | | int.TryParse(tables[29],out Skill1); |
| | | int.TryParse(tables[29], out Skill1);
|
| | |
|
| | | int.TryParse(tables[30],out Skill2); |
| | | int.TryParse(tables[30], out Skill2);
|
| | |
|
| | | int.TryParse(tables[31],out Skill3); |
| | | int.TryParse(tables[31], out Skill3);
|
| | |
|
| | | int.TryParse(tables[32],out Skill4); |
| | | int.TryParse(tables[32], out Skill4);
|
| | |
|
| | | int.TryParse(tables[33],out Skill5); |
| | | int.TryParse(tables[33], out Skill5);
|
| | |
|
| | | int.TryParse(tables[34],out Skill6); |
| | | int.TryParse(tables[34], out Skill6);
|
| | |
|
| | | int.TryParse(tables[35],out Skill7); |
| | | int.TryParse(tables[35], out Skill7);
|
| | |
|
| | | int.TryParse(tables[36],out Skill8); |
| | | int.TryParse(tables[36], out Skill8);
|
| | |
|
| | | int.TryParse(tables[37],out AtkType); |
| | | int.TryParse(tables[37], out AtkType);
|
| | |
|
| | | int.TryParse(tables[38],out Sight); |
| | | int.TryParse(tables[38], out Sight);
|
| | |
|
| | | int.TryParse(tables[39],out MoveArea); |
| | | int.TryParse(tables[39], out MoveArea);
|
| | |
|
| | | int.TryParse(tables[40],out DHP); |
| | | int.TryParse(tables[40], out DHP);
|
| | |
|
| | | int.TryParse(tables[41],out MaxHPEx); |
| | | int.TryParse(tables[41], out MaxHPEx);
|
| | |
|
| | | int.TryParse(tables[42],out IsBoss); |
| | | int.TryParse(tables[42], out IsBoss);
|
| | |
|
| | | int.TryParse(tables[43],out SP); |
| | | int.TryParse(tables[43], out SP);
|
| | |
|
| | | int.TryParse(tables[44],out AIType); |
| | | int.TryParse(tables[44], out AIType);
|
| | |
|
| | | int.TryParse(tables[45],out CanAttack); |
| | | int.TryParse(tables[45], out CanAttack);
|
| | |
|
| | | float.TryParse(tables[46],out weight); |
| | | float.TryParse(tables[46], out weight);
|
| | |
|
| | | HeadPortrait = tables[47];
|
| | | HeadPortrait = tables[47];
|
| | |
|
| | | int.TryParse(tables[48],out Show); |
| | | int.TryParse(tables[48], out Show);
|
| | |
|
| | | int.TryParse(tables[49],out AtkFeedback); |
| | | int.TryParse(tables[49], out AtkFeedback);
|
| | |
|
| | | int.TryParse(tables[50],out hurtFeedback); |
| | | int.TryParse(tables[50], out hurtFeedback);
|
| | |
|
| | | int.TryParse(tables[51],out AutomaticFace); |
| | | int.TryParse(tables[51], out AutomaticFace);
|
| | |
|
| | | int.TryParse(tables[52],out Dig); |
| | | int.TryParse(tables[52], out Dig);
|
| | |
|
| | | string[] SoundsStringArray = tables[53].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
|
| | | Sounds = new int[SoundsStringArray.Length];
|
| | | for (int i=0;i<SoundsStringArray.Length;i++)
|
| | | {
|
| | | int.TryParse(SoundsStringArray[i],out Sounds[i]);
|
| | | }
|
| | | string[] SoundsStringArray = tables[53].Trim().Split(StringUtility.splitSeparator, StringSplitOptions.RemoveEmptyEntries);
|
| | | Sounds = new int[SoundsStringArray.Length];
|
| | | for (int i = 0; i < SoundsStringArray.Length; i++)
|
| | | {
|
| | | int.TryParse(SoundsStringArray[i], out Sounds[i]);
|
| | | }
|
| | |
|
| | | int.TryParse(tables[54],out LifeBarCount); |
| | | int.TryParse(tables[54], out LifeBarCount);
|
| | |
|
| | | int.TryParse(tables[55],out NPCEffect); |
| | | int.TryParse(tables[55], out NPCEffect);
|
| | |
|
| | | int.TryParse(tables[56],out NPCSpeakID); |
| | | int.TryParse(tables[56], out NPCSpeakID);
|
| | |
|
| | | int.TryParse(tables[57],out ClientRealm); |
| | | int.TryParse(tables[57], out ClientRealm);
|
| | |
|
| | | Equips = tables[58];
|
| | | Equips = tables[58];
|
| | | }
|
| | | catch (Exception ex)
|
| | | {
|
| | |
| | |
|
| | | static Dictionary<string, NPCConfig> configs = new Dictionary<string, NPCConfig>();
|
| | | public static NPCConfig Get(string id)
|
| | | { |
| | | if (!inited)
|
| | | {
|
| | | if (!inited)
|
| | | {
|
| | | Debug.Log("NPCConfig 还未完成初始化。");
|
| | | return null;
|
| | | }
|
| | | |
| | |
|
| | | if (configs.ContainsKey(id))
|
| | | {
|
| | | return configs[id];
|
| | |
| | | return config;
|
| | | }
|
| | |
|
| | | public static NPCConfig Get(int id)
|
| | | public static NPCConfig Get(int id)
|
| | | {
|
| | | return Get(id.ToString());
|
| | | }
|
| | |
| | | return values;
|
| | | }
|
| | |
|
| | | public static bool Has(string id)
|
| | | public static bool Has(string id)
|
| | | {
|
| | | return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
|
| | | }
|
| | |
|
| | | public static bool Has(int id)
|
| | | public static bool Has(int id)
|
| | | {
|
| | | return Has(id.ToString());
|
| | | }
|
| | |
|
| | | public static bool inited { get; private set; }
|
| | | public static bool inited { get; private set; }
|
| | | protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
|
| | | public static void Init(bool sync=false)
|
| | | public static void Init(bool sync = false)
|
| | | {
|
| | | inited = false;
|
| | | var path = string.Empty;
|
| | | inited = false;
|
| | | var path = string.Empty;
|
| | | if (AssetSource.refdataFromEditor)
|
| | | {
|
| | | path = ResourcesPath.CONFIG_FODLER +"/NPC.txt";
|
| | | path = ResourcesPath.CONFIG_FODLER + "/NPC.txt";
|
| | | }
|
| | | else
|
| | | {
|
| | | path = AssetVersionUtility.GetAssetFilePath("config/NPC.txt");
|
| | | }
|
| | |
|
| | | var tempConfig = new NPCConfig();
|
| | | var tempConfig = new NPCConfig();
|
| | | var preParse = tempConfig is IConfigPostProcess;
|
| | |
|
| | | if (sync)
|
| | |
| | |
|
| | | if (preParse)
|
| | | {
|
| | | configs[id] = new NPCConfig(line);
|
| | | var config = new NPCConfig(line);
|
| | | configs[id] = config;
|
| | | (config as IConfigPostProcess).OnConfigParseCompleted();
|
| | | }
|
| | | else
|
| | | {
|
| | | rawDatas[id] = line;
|
| | | }
|
| | | }
|
| | | inited = true;
|
| | | inited = true;
|
| | | }
|
| | | else
|
| | | {
|
| | | ThreadPool.QueueUserWorkItem((object _object) =>
|
| | | {
|
| | | var lines = File.ReadAllLines(path);
|
| | | if (!preParse)
|
| | | {
|
| | | rawDatas = new Dictionary<string, string>(lines.Length - 3);
|
| | | }
|
| | | if (!preParse)
|
| | | {
|
| | | rawDatas = new Dictionary<string, string>(lines.Length - 3);
|
| | | }
|
| | | for (int i = 3; i < lines.Length; i++)
|
| | | {
|
| | | var line = lines[i];
|
| | | var index = line.IndexOf("\t");
|
| | | var id = line.Substring(0, index);
|
| | |
|
| | | if (preParse)
|
| | | {
|
| | | configs[id] = new NPCConfig(line);
|
| | | }
|
| | | else
|
| | | {
|
| | | rawDatas[id] = line;
|
| | | }
|
| | | if (preParse)
|
| | | {
|
| | | var config = new NPCConfig(line);
|
| | | configs[id] = config;
|
| | | (config as IConfigPostProcess).OnConfigParseCompleted();
|
| | | }
|
| | | else
|
| | | {
|
| | | rawDatas[id] = line;
|
| | | }
|
| | | }
|
| | |
|
| | | inited = true;
|