using UnityEngine; using System.Collections; using System.Collections.Generic; /// /// 角色基础属性内容相关信息 /// public class RoleAttributeData { #region properties public int id; public int exp; public int gainPoint; //获取的能量点 public SInt[] attrs = new SInt[ActorData.s_SecondAttrNum]; #endregion private bool bValid = false; public bool valid { get { return bValid; } } public RoleAttributeData(int level) { this.id = level; Dictionary dic = ConfigMgr.Instance.getLine(level, Config.RoleAttrCfgName); if(dic == null) { DebugHelper.LogError(string.Format("加载角色属性数据失败 id = {0}", id)); bValid = false; return; } if(dic.ContainsKey("Exp")) { int.TryParse(dic["Exp"], out exp); } if(dic.ContainsKey("GetPoint")) { int.TryParse(dic["GetPoint"], out gainPoint); } int iTemp = 0; if(dic.ContainsKey("Hp") && int.TryParse(dic["Hp"], out iTemp)) { attrs[ActorData.Attr_Life - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Sp") && int.TryParse(dic["Sp"],out iTemp)) { attrs[ActorData.Attr_Sp - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Atk") && int.TryParse(dic["Atk"],out iTemp)) { attrs[ActorData.Attr_Attack - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Matk") && int.TryParse(dic["Matk"],out iTemp)) { attrs[ActorData.Attr_MagicAttack - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Def") && int.TryParse(dic["Def"],out iTemp)) { attrs[ActorData.Attr_Defense - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Mdef") && int.TryParse(dic["Mdef"],out iTemp)) { attrs[ActorData.Attr_MagicDefense - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Hit") && int.TryParse(dic["Hit"],out iTemp)) { attrs[ActorData.Attr_Hit - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Dodge") && int.TryParse(dic["Dodge"],out iTemp)) { attrs[ActorData.Attr_Dodge - ActorData.Attr_Life] = iTemp; } if(dic.ContainsKey("Crit") && int.TryParse(dic["Crit"], out iTemp)) { attrs[ActorData.Attr_Crit - ActorData.Attr_Life] = iTemp; } if (dic.ContainsKey("Ten") && int.TryParse(dic["Ten"], out iTemp)) { attrs[ActorData.Attr_Ten - ActorData.Attr_Life] = iTemp; } bValid = true; } public SInt GetAttr(int attrId) { if (attrId < ActorData.Attr_Life) return 0; return attrs[attrId - ActorData.Attr_Life]; } private bool mbDisposed = false; public void Dispose() { if (mbDisposed) return; attrs = null; mbDisposed = true; } } /// /// 角色基础数据 /// public class RoleBaseData { public int Id; public string Name; public string Desc; public int professionId; public int sex; public int avatarId; public string headId; public string WeaponPath; public string ClothPath; public string BattleCtrlPath; public string ShowCtrlPath; public string frameEventName; public string battleBigIcon; public bool valid { get { return isvalid; } } private bool isvalid = false; private bool mbDisposed = false; public RoleBaseData(int id) { Id = id; Dictionary dic = ConfigMgr.Instance.getLine(id, Config.RoleCfgName); if(dic!=null) { if (dic.ContainsKey("Name")) this.Name = dic["Name"]; if (dic.ContainsKey("Desc")) this.Desc = dic["Desc"]; if (dic.ContainsKey("JobId")) int.TryParse(dic["JobId"], out professionId); if (dic.ContainsKey("Sex")) int.TryParse(dic["Sex"], out sex); if (dic.ContainsKey("AvatarId")) int.TryParse(dic["AvatarId"], out avatarId); if (dic.ContainsKey("HeadId")) headId = dic["HeadId"]; if (dic.ContainsKey("BattleCartoonImg")) { battleBigIcon = dic["BattleCartoonImg"]; } if(dic.ContainsKey("WeaponId")) { WeaponPath = dic["WeaponId"]; } if (dic.ContainsKey("ClothId")) { ClothPath = dic["ClothId"]; } if(dic.ContainsKey("BattleCtrl")) { BattleCtrlPath = dic["BattleCtrl"]; } if(dic.ContainsKey("RoleShowCtrl")) { ShowCtrlPath = dic["RoleShowCtrl"]; } isvalid = true; } else { DebugHelper.LogError(string.Format("角色{0}不存在", id)); } } public void Dispose() { isvalid = false; } } /// /// NPC相关数据 /// public class NpcBaseData { public int npcId; public int monsterId; public string npcName; public int level; public int avatarId; public int headId; public int professionType; public int position; public int bornEffectId; public SFloat life; public SFloat sp; public SFloat minAttack; public SFloat attack; public SFloat minMagicAttack; public SFloat magicAttack; public SFloat defense; public SFloat magicDefense; public SFloat hit; public SFloat dodge; public SFloat crit; public SFloat ten; public SFloat attackSpeed; public SFloat GodPower; public string[] normalSkillIds; public string[] skillIds; public string[] alternativeSkills; public string[] PassiveSkills; public int natureId; public int raceId; public SFloat hpRate; public SFloat spRate; public SFloat atkRate; public SFloat matkRate; public SFloat defRate; public SFloat mdefRate; public SFloat hitRate; public SFloat dodgeRate; public SFloat critRate; public SFloat tenRate; public SFloat GodPowerRate; public string headIcon; public string battleBigIcon; public string frameEventName; public bool showHpBar; public bool valid { get { return isvalid; } } private bool isvalid = false; private bool mbDisposed = false; public NpcBaseData(int id) { npcId = id; ReadFromConfig(); } void ReadFromConfig() { Dictionary dic = ConfigMgr.Instance.getLine(this.npcId, Config.NpcCfgName); if (dic != null) { this.npcName = dic["Name"]; if(dic.ContainsKey("MonsterId")) { int.TryParse(dic["MonsterId"], out monsterId); } if(dic.ContainsKey("BaseLv")) { int.TryParse(dic["BaseLv"], out level); } if(dic.ContainsKey("AvatarId")) { int.TryParse(dic["AvatarId"], out avatarId); } if(dic.ContainsKey("HeadId")) { int.TryParse(dic["HeadId"], out headId); } if(dic.ContainsKey("JobType")) { int.TryParse(dic["JobType"], out professionType); } if(dic.ContainsKey("Position")) { int.TryParse(dic["Position"], out position); } if(dic.ContainsKey("Hp")) { float temp = 0; float.TryParse(dic["Hp"], out temp); life = temp; } if(dic.ContainsKey("Sp")) { float temp = 0; float.TryParse(dic["Sp"], out temp); sp = temp; } if(dic.ContainsKey("Atk")) { float temp = 0; float.TryParse(dic["Atk"], out temp); attack = temp; } if(dic.ContainsKey("MinAtk")) { float temp = 0; float.TryParse(dic["MinAtk"], out temp); minAttack = temp; } if(dic.ContainsKey("Matk")) { float temp = 0; float.TryParse(dic["Matk"], out temp); magicAttack = temp; } if(dic.ContainsKey("MinMatk")) { float temp = 0; float.TryParse(dic["MinMatk"], out temp); minMagicAttack = temp; } if(dic.ContainsKey("Def")) { float temp = 0; float.TryParse(dic["Def"], out temp); defense = temp; } if(dic.ContainsKey("Mdef")) { float temp = 0; float.TryParse(dic["Mdef"], out temp); magicDefense = temp; } if(dic.ContainsKey("Hit")) { float temp = 0; float.TryParse(dic["Hit"], out temp); hit = temp; } if(dic.ContainsKey("Dodge")) { float temp = 0; float.TryParse(dic["Dodge"], out temp); dodge = temp; } if(dic.ContainsKey("Crit")) { float temp = 0; float.TryParse(dic["Crit"], out temp); crit = temp; } if(dic.ContainsKey("Ten")) { float temp = 0; float.TryParse(dic["Ten"], out temp); ten = temp; } if(dic.ContainsKey("AttackSpeed")) { float temp = 0; float.TryParse(dic["AttackSpeed"], out temp); attackSpeed = temp; } if(dic.ContainsKey("NatureId")) { int.TryParse(dic["NatureId"], out natureId); } if(dic.ContainsKey("RaceId")) { int.TryParse(dic["RaceId"], out raceId); } if (dic.ContainsKey("NormalSkillIds")) { normalSkillIds = StringUtil.split(dic["NormalSkillIds"], ';'); } if(dic.ContainsKey("SkillIds")) { skillIds = StringUtil.split(dic["SkillIds"], ';'); } if(dic.ContainsKey("AlternativeSkills")) { alternativeSkills = StringUtil.split(dic["AlternativeSkills"], ';'); } if (dic.ContainsKey("PassiveSkills")) { PassiveSkills = StringUtil.split(dic["PassiveSkills"], ';'); } if (dic.ContainsKey("BattleCartoonImg")) { battleBigIcon = dic["BattleCartoonImg"]; } if(dic.ContainsKey("Head")) { headIcon = dic["Head"]; } if(dic.ContainsKey("HPBar")) { int temp = 0; int.TryParse(dic["HPBar"], out temp); showHpBar = temp > 0; } if(dic.ContainsKey("BornEffect")) { int.TryParse(dic["BornEffect"], out bornEffectId); } if(dic.ContainsKey("ArtifactValue")) { float temp = 0; float.TryParse(dic["ArtifactValue"], out temp); GodPower = temp; } if (dic.ContainsKey("ArtifactValueRate")) { float temp = 0; float.TryParse(dic["ArtifactValueRate"], out temp); GodPowerRate = temp; } hpRate = ReadAttrRate(dic, "HpRate"); spRate = ReadAttrRate(dic, "SpRate"); atkRate = ReadAttrRate(dic, "AtkRate"); matkRate = ReadAttrRate(dic, "MatkRate"); defRate = ReadAttrRate(dic, "DefRate"); mdefRate = ReadAttrRate(dic, "MdefRate"); hitRate = ReadAttrRate(dic, "HitRate"); dodgeRate = ReadAttrRate(dic, "DodgeRate"); critRate = ReadAttrRate(dic, "CritRate"); tenRate = ReadAttrRate(dic, "TenRate"); isvalid = true; } else { DebugHelper.Log("NPC配置不存在!ID: " + npcId); } } SFloat ReadAttrRate(Dictionary dic, string attrName) { if (dic == null) { return 0; } if(dic.ContainsKey(attrName)) { int temp; int.TryParse(dic[attrName], out temp); return temp/10000.0f; } return 0; } public void Dispose() { if (mbDisposed) return; skillIds = null; normalSkillIds = null; PassiveSkills = null; mbDisposed = true; } } public struct stPetSkillData { private int mSkillId; private List mTriggerRate; public int SkillId { get { return mSkillId; } set { mSkillId = value; } } public List TriggerRate { get { return mTriggerRate; } set { mTriggerRate = value; } } } public class PetBossBaseData: PetBaseData { public PetBossBaseData(int id):base(id) { petId = id; ReadFromConfig(); } protected override void ReadFromConfig() { Dictionary dic = ConfigMgr.Instance.getLine(petId, Config.PetBossCfgName); if (dic != null) { this.petName = dic["Name"]; if (dic.ContainsKey("AvatarId")) { int.TryParse(dic["AvatarId"], out avatarId); } if (dic.ContainsKey("JobType")) { int.TryParse(dic["JobType"], out profession); } if (dic.ContainsKey("Head")) { headIcon = dic["Head"]; } if (dic.ContainsKey("Quality")) { int.TryParse(dic["Quality"], out quality); } if (dic.ContainsKey("NatureType")) { int.TryParse(dic["NatureType"], out natureId); } if (dic.ContainsKey("Pos")) { int.TryParse(dic["Pos"], out position); } if (dic.ContainsKey("Hp")) { float temp = 0; float.TryParse(dic["Hp"], out temp); life = temp; } if (dic.ContainsKey("Sp")) { float temp = 0; float.TryParse(dic["Sp"], out temp); sp = temp; } if (dic.ContainsKey("Atk")) { float temp = 0; float.TryParse(dic["Atk"], out temp); attack = temp; } if (dic.ContainsKey("Matk")) { float temp = 0; float.TryParse(dic["Matk"], out temp); magicAttack = temp; } if (dic.ContainsKey("Def")) { float temp = 0; float.TryParse(dic["Def"], out temp); defense = temp; } if (dic.ContainsKey("Mdef")) { float temp = 0; float.TryParse(dic["Mdef"], out temp); magicDefense = temp; } if (dic.ContainsKey("Hit")) { float temp = 0; float.TryParse(dic["Hit"], out temp); hit = temp; } if (dic.ContainsKey("Dodge")) { float temp = 0; float.TryParse(dic["Dodge"], out temp); dodge = temp; } if (dic.ContainsKey("Crit")) { float temp = 0; float.TryParse(dic["Crit"], out temp); crit = temp; } if (dic.ContainsKey("Ten")) { float temp = 0; float.TryParse(dic["Ten"], out temp); ten = temp; } if (dic.ContainsKey("AttackSpeed")) { float temp = 0; float.TryParse(dic["AttackSpeed"], out temp); attackSpeed = temp; } if (dic.ContainsKey("NormalSkillIds")) { normalSkillIds = StringUtil.split(dic["NormalSkillIds"], ';'); } skills = new stPetSkillData[3]; for (int idx = 1; idx <= 3; idx++) { string skillKey = "Skill" + idx; string skillRateKey = skillKey + "Rate"; if (dic.ContainsKey(skillKey)) { int skillId = 0; stPetSkillData skillData = new stPetSkillData(); int.TryParse(dic[skillKey], out skillId); if (skillId > 0) { skillData.SkillId = skillId; if (dic.ContainsKey(skillRateKey)) { skillData.TriggerRate = StringUtil.convert2IntList(dic[skillRateKey], ';'); } skills[idx - 1] = skillData; if (idx == 1) { SkillParam p = new SkillParam(skillId, 1); testSkills.Add(p); } else { SkillParam p = new SkillParam(skillId, 1, skillData.TriggerRate[0]); testSkills.Add(p); } } } } if (dic.ContainsKey("EmptySkill")) { int.TryParse(dic["EmptySkill"], out emptySkillId); } if (dic.ContainsKey("BattleCtrl")) { battleCtrl = dic["BattleCtrl"]; } if (dic.ContainsKey("ShowCtrl")) { showCtrl = dic["ShowCtrl"]; } hpRate = ReadAttrRate(dic, "HpRate"); spRate = ReadAttrRate(dic, "SpRate"); atkRate = ReadAttrRate(dic, "AtkRate"); matkRate = ReadAttrRate(dic, "MatkRate"); defRate = ReadAttrRate(dic, "DefRate"); mdefRate = ReadAttrRate(dic, "MdefRate"); hitRate = ReadAttrRate(dic, "HitRate"); dodgeRate = ReadAttrRate(dic, "DodgeRate"); critRate = ReadAttrRate(dic, "CritRate"); tenRate = ReadAttrRate(dic, "TenRate"); isvalid = true; } else { DebugHelper.LogError("宠物配置不存在!ID: " + petId); } } } public class PetBaseData { public int petId; public string petName; public int avatarId; public int position; public int quality; public int natureId; public int profession; public string headIcon; public string battleCtrl; public string showCtrl; public string[] normalSkillIds; public stPetSkillData[] skills; public int emptySkillId; public SFloat life; public SFloat sp; public SFloat attack; public SFloat magicAttack; public SFloat defense; public SFloat magicDefense; public SFloat hit; public SFloat dodge; public SFloat crit; public SFloat ten; public SFloat attackSpeed; public SFloat hpRate; public SFloat spRate; public SFloat atkRate; public SFloat matkRate; public SFloat defRate; public SFloat mdefRate; public SFloat hitRate; public SFloat dodgeRate; public SFloat critRate; public SFloat tenRate; public List testSkills = new List(); public bool valid { get { return isvalid; } } protected bool isvalid = false; private bool mbDisposed = false; public PetBaseData(int id) { petId = id; ReadFromConfig(); } protected virtual void ReadFromConfig() { Dictionary dic = ConfigMgr.Instance.getLine(petId, Config.PetCfgName); if (dic != null) { this.petName = dic["Name"]; if (dic.ContainsKey("AvatarId")) { int.TryParse(dic["AvatarId"], out avatarId); } if(dic.ContainsKey("JobType")) { int.TryParse(dic["JobType"], out profession); } if (dic.ContainsKey("Icon")) { headIcon = dic["Icon"]; } if(dic.ContainsKey("Quality")) { int.TryParse(dic["Quality"], out quality); } if (dic.ContainsKey("NatureType")) { int.TryParse(dic["NatureType"], out natureId); } if (dic.ContainsKey("Pos")) { int.TryParse(dic["Pos"], out position); } if (dic.ContainsKey("Hp")) { float temp = 0; float.TryParse(dic["Hp"], out temp); life = temp; } if (dic.ContainsKey("Sp")) { float temp = 0; float.TryParse(dic["Sp"], out temp); sp = temp; } if (dic.ContainsKey("Atk")) { float temp = 0; float.TryParse(dic["Atk"], out temp); attack = temp; } if (dic.ContainsKey("Matk")) { float temp = 0; float.TryParse(dic["Matk"], out temp); magicAttack = temp; } if (dic.ContainsKey("Def")) { float temp = 0; float.TryParse(dic["Def"], out temp); defense = temp; } if (dic.ContainsKey("Mdef")) { float temp = 0; float.TryParse(dic["Mdef"], out temp); magicDefense = temp; } if (dic.ContainsKey("Hit")) { float temp = 0; float.TryParse(dic["Hit"], out temp); hit = temp; } if (dic.ContainsKey("Dodge")) { float temp = 0; float.TryParse(dic["Dodge"], out temp); dodge = temp; } if (dic.ContainsKey("Crit")) { float temp = 0; float.TryParse(dic["Crit"], out temp); crit = temp; } if (dic.ContainsKey("Ten")) { float temp = 0; float.TryParse(dic["Ten"], out temp); ten = temp; } if (dic.ContainsKey("AttackSpeed")) { float temp = 0; float.TryParse(dic["AttackSpeed"], out temp); attackSpeed = temp; } if (dic.ContainsKey("NormalSkillIds")) { normalSkillIds = StringUtil.split(dic["NormalSkillIds"], ';'); } skills = new stPetSkillData[3]; for (int idx =1; idx <= 3; idx++) { string skillKey = "Skill" + idx; string skillRateKey = skillKey + "Rate"; if (dic.ContainsKey(skillKey)) { int skillId = 0; stPetSkillData skillData = new stPetSkillData(); int.TryParse(dic[skillKey], out skillId); if (skillId > 0) { skillData.SkillId = skillId; if (dic.ContainsKey(skillRateKey)) { skillData.TriggerRate = StringUtil.convert2IntList(dic[skillRateKey], ';'); } skills[idx-1] = skillData; if(idx == 1) { SkillParam p = new SkillParam(skillId, 1); testSkills.Add(p); } else { SkillParam p = new SkillParam(skillId, 1,skillData.TriggerRate[0]); testSkills.Add(p); } } } } if(dic.ContainsKey("EmptySkill")) { int.TryParse(dic["EmptySkill"], out emptySkillId); } if(dic.ContainsKey("BattleCtrl")) { battleCtrl = dic["BattleCtrl"]; } if(dic.ContainsKey("ShowCtrl")) { showCtrl = dic["ShowCtrl"]; } hpRate = ReadAttrRate(dic, "HpRate"); spRate = ReadAttrRate(dic, "SpRate"); atkRate = ReadAttrRate(dic, "AtkRate"); matkRate = ReadAttrRate(dic, "MatkRate"); defRate = ReadAttrRate(dic, "DefRate"); mdefRate = ReadAttrRate(dic, "MdefRate"); hitRate = ReadAttrRate(dic, "HitRate"); dodgeRate = ReadAttrRate(dic, "DodgeRate"); critRate = ReadAttrRate(dic, "CritRate"); tenRate = ReadAttrRate(dic, "TenRate"); isvalid = true; } else { DebugHelper.LogError("宠物配置不存在!ID: " + petId); } } protected SFloat ReadAttrRate(Dictionary dic, string attrName) { if (dic == null) { return 0; } if (dic.ContainsKey(attrName)) { int temp; int.TryParse(dic[attrName], out temp); return temp / 10000.0f; } return 0; } public void Dispose() { if (mbDisposed) return; normalSkillIds = null; skills = null; mbDisposed = true; } } public class PetAdvanceData { public Dictionary> advanceData; public Dictionary> advanceRateData; public PetAdvanceData(int id) { ReadFromConfig(id); } void ReadFromConfig(int petId) { Dictionary dic = ConfigMgr.Instance.getLine(petId, Config.PetProgressCfgName); if (dic != null) { advanceData = new Dictionary>(); advanceRateData = new Dictionary>(); for (int idx = 1; idx <= 5; idx++) { string attributeKey = "Attribute" + idx; string attributeRateKey = "AttributeRateAdd" + idx; if (dic.ContainsKey(attributeKey)) { string temp = dic[attributeKey]; if(!string.IsNullOrEmpty(temp)) { List advanceVals = new List(); string[] tempList = temp.Split(';'); for(int jdx = 0; jdx < tempList.Length;jdx++) { string[] valList = tempList[jdx].Split(':'); if(valList.Length == 2) { int keyVal = 0; int iVal = 0; int.TryParse(valList[0], out keyVal); int.TryParse(valList[1], out iVal); ValType valType = new ValType(keyVal, iVal); advanceVals.Add(valType); } } advanceData.Add(idx, advanceVals); } } if(dic.ContainsKey(attributeRateKey)) { string temp = dic[attributeRateKey]; if (!string.IsNullOrEmpty(temp)) { List advanceRateVals = new List(); string[] tempList = temp.Split(';'); for (int jdx = 0; jdx < tempList.Length; jdx++) { string[] valList = tempList[jdx].Split(':'); if (valList.Length == 2) { int keyVal = 0; int iVal = 0; int.TryParse(valList[0], out keyVal); int.TryParse(valList[1], out iVal); ValType valType = new ValType(keyVal, iVal); advanceRateVals.Add(valType); } } advanceRateData.Add(idx, advanceRateVals); } } } } else { DebugHelper.LogError("宠物进阶表中没有宠物配置!ID: " + petId); } } } //伙伴基础数据 public class FellowBaseData { private string[] mNormalSkillIds; private string[] mSkillIds; private string[] mAlternativeSkills; private bool isValid = false; public bool valid { get { return isValid; } } public int Id; public string Name; public string Desc; public int AvatarId; public int NatureId; public int RaceId; public int Position; public int JobType; public int JobStage; public int JobBranch; public SFloat STRRate; public SFloat INTRate; public SFloat AGIRate; public SFloat DEXRate; public SFloat LUCKRate; public SFloat VITRate; public SFloat AttackSpeed; public string[] NormalSkillIds { get { return mNormalSkillIds; } } public string[] SkillIds { get { return mSkillIds; } } public string[] AlternativeSkills { get { return mAlternativeSkills; } } public SInt[] attrs = new SInt[ActorData.s_SecondAttrNum]; public string frameEventName; public string ProfessionIcon; public string HeadIcon; public string ShowAnimCtrl; public string BattleAnimCtrl; public string battleBigIcon; public FellowBaseData(int id) { Dictionary dic = ConfigMgr.Instance.getLine(id, Config.FellowCfgName); if (dic != null) { this.Id = id; this.Name = dic["Name"]; this.Desc = dic["Desc"]; this.ProfessionIcon = dic["JobIcon"]; this.HeadIcon = dic["HeadId"]; int.TryParse(dic["AvatarId"], out this.AvatarId); int.TryParse(dic["Position"], out this.Position); int.TryParse(dic["NatureId"], out this.NatureId); int.TryParse(dic["RaceId"], out this.RaceId); int.TryParse(dic["JobType"], out this.JobType); int temp = 0; int.TryParse(dic["StrRate"], out temp); STRRate = temp * 0.0001f; int.TryParse(dic["IntRate"], out temp); INTRate = temp * 0.0001f; int.TryParse(dic["AgiRate"], out temp); AGIRate = temp * 0.0001f; int.TryParse(dic["DexRate"], out temp); DEXRate = temp * 0.0001f; int.TryParse(dic["LucRate"], out temp); LUCKRate = temp * 0.0001f; int.TryParse(dic["ViteRate"], out temp); VITRate = temp * 0.0001f; int.TryParse(dic["Aspd"], out temp); AttackSpeed = temp; if(dic.ContainsKey("JobStage")) { int.TryParse(dic["JobStage"], out this.JobStage); } if(dic.ContainsKey("JobBranch")) { int.TryParse(dic["JobBranch"], out this.JobBranch); } if (dic.ContainsKey("Hp") && int.TryParse(dic["Hp"], out temp)) { attrs[ActorData.Attr_Life - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Sp") && int.TryParse(dic["Sp"], out temp)) { attrs[ActorData.Attr_Sp - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Atk") && int.TryParse(dic["Atk"], out temp)) { attrs[ActorData.Attr_Attack - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Matk") && int.TryParse(dic["Matk"], out temp)) { attrs[ActorData.Attr_MagicAttack - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Def") && int.TryParse(dic["Def"], out temp)) { attrs[ActorData.Attr_Defense - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Mdef") && int.TryParse(dic["Mdef"], out temp)) { attrs[ActorData.Attr_MagicDefense - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Hit") && int.TryParse(dic["Hit"], out temp)) { attrs[ActorData.Attr_Hit - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Dodge") && int.TryParse(dic["Dodge"], out temp)) { attrs[ActorData.Attr_Dodge - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Crit") && int.TryParse(dic["Crit"], out temp)) { attrs[ActorData.Attr_Crit - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("Ten") && int.TryParse(dic["Ten"], out temp)) { attrs[ActorData.Attr_Ten - ActorData.Attr_Life] = temp; } if (dic.ContainsKey("NormalSkillIds")) { mNormalSkillIds = StringUtil.split(dic["NormalSkillIds"], ';'); } if (dic.ContainsKey("SkillIds")) { mSkillIds = StringUtil.split(dic["SkillIds"], ';'); } if(dic.ContainsKey("AlternativeSkills")) { mAlternativeSkills = StringUtil.split(dic["AlternativeSkills"], ';'); } if(dic.ContainsKey("ShowCtrl")) { ShowAnimCtrl = dic["ShowCtrl"]; } if(dic.ContainsKey("BattleCtrl")) { BattleAnimCtrl = dic["BattleCtrl"]; } if (dic.ContainsKey("BattleCartoonImg")) { battleBigIcon = dic["BattleCartoonImg"]; } isValid = true; } } public SInt GetAttr(int attrId) { if (attrId < ActorData.Attr_Life) return 0; return attrs[attrId - ActorData.Attr_Life]; } public void Dispose() { isValid = false; mNormalSkillIds = null; mSkillIds = null; attrs = null; } } //伙伴属性数据 public class FellowAttributeData { #region properties public int id; public int exp; public int gainPoint; //获取的能量点 public int upgradeCost; //升级费用 #endregion private bool bValid = false; public bool valid { get { return bValid; } } public FellowAttributeData(int level) { this.id = level; Dictionary dic = ConfigMgr.Instance.getLine(level, Config.FellowAttrCfgName); if (dic == null) { DebugHelper.LogError(string.Format("加载角色属性数据失败 id = {0}", id)); bValid = false; return; } if (dic.ContainsKey("Exp")) { int.TryParse(dic["Exp"], out exp); } if (dic.ContainsKey("Money")) { int.TryParse(dic["Money"], out upgradeCost); } bValid = true; } private bool mbDisposed = false; public void Dispose() { if (mbDisposed) return; mbDisposed = true; } }