public void RefreshSkillLevel() { mHasReplaceIds.Clear(); if (m_skills_info_array == null) { return; } DBDataAllSkill db_all_skill = DBManager.Instance.GetDB <DBDataAllSkill>(); for (int index = 0; index < m_skills_info_array.Count; ++index) { uint all_skill_id = m_skills_info_array[index].id; DBDataAllSkill.AllSkillInfo info = db_all_skill.GetOneAllSkillInfo(all_skill_id); if (info != null && info.ReplaceIds != null) { foreach (var item in info.ReplaceIds) { if (mHasReplaceIds.ContainsKey(item) == false) { mHasReplaceIds.Add(item, all_skill_id); } else { GameDebug.LogRed(string.Format("old_skill_id = {0} new_skill_id", mHasReplaceIds[item], all_skill_id)); } } } } }
/// <summary> /// 获取该任务指定职业能够获取到的技能id /// </summary> /// <param name="vocation"></param> /// <returns></returns> public uint GetSkillByVocation(uint vocation = 0) { if (vocation == 0) { vocation = LocalPlayerManager.Instance.LocalActorAttribute.Vocation; } DBDataAllSkill dbAllSkill = DBManager.Instance.GetDB <DBDataAllSkill>(); foreach (uint skillId in GetSkills) { var allSkillInfo = dbAllSkill.GetOneAllSkillInfo(skillId); if (allSkillInfo != null && (allSkillInfo.Require_race == 0 || allSkillInfo.Require_race == vocation)) { return(skillId); } } return(0); }
/// <summary> /// 根据服务端的数据来设置所有已开放的主动和被动技能 /// </summary> /// <param name="add_skills"></param> public void AddSkillList(List <Net.PkgSkillsOne> add_skills) { DBDataAllSkill db_all_skill = DBManager.Instance.GetDB <DBDataAllSkill>(); // 获取新的技能的id,需要在返回野外的时候表现获取的动画,同时获得多个时,只表现最后一个技能的动画 uint new_active_skill_id = 0; if (m_skills_info_array == null) { m_skills_info_array = new List <Net.PkgSkillsOne>(); if (m_new_skills_array == null) { m_new_skills_array = new List <uint>(); // m_new_skills_array的数据 用于在技能系统面板中显示'新'的标识 string newSkillSaveNameStr = string.Format("{0}NewSkillList", Game.GetInstance().LocalPlayerID.obj_idx); string newSkillListStr = UserPlayerPrefs.GetInstance().GetString(newSkillSaveNameStr, ""); string[] substr = newSkillListStr.Split(','); uint skill_id = 0; for (int index = 0; index < substr.Length; ++index) { string cur = substr[index]; if (uint.TryParse(cur, out skill_id)) { if (skill_id != 0) { m_new_skills_array.Add(skill_id); } } } } } else // m_skills_info_array不为空时 { bool add_newLearnSkill = false; foreach (var item in add_skills) { if (m_new_skills_array.Contains(item.id) == false) { m_new_skills_array.Add(item.id); add_newLearnSkill = true; } // 判断是否有新获取的主动技能 var skil_info = db_all_skill.GetOneAllSkillInfo(item.id); if (skil_info != null && skil_info.SkillType == DBDataAllSkill.SKILL_TYPE.Active) { if (m_ActiveSkillIdList != null && !m_ActiveSkillIdList.Contains(item.id)) { new_active_skill_id = item.id; } } } if (add_newLearnSkill) { SaveNewSkillList(); } } m_skills_info_array.AddRange(add_skills); if (m_ActiveSkillIdList == null) { m_ActiveSkillIdList = new List <uint>(); } // 获取已经开放的技能列表,来设置固定装配位置的技能 foreach (var info in m_skills_info_array) { // 不处理被动技能 var skil_info = db_all_skill.GetOneAllSkillInfo(info.id); if (skil_info == null || skil_info.SkillType != DBDataAllSkill.SKILL_TYPE.Active) { continue; } if (m_ActiveSkillIdList.Contains(info.id) == false) { //GameDebug.LogError("m_ActiveSkillIdList " + info.id); m_ActiveSkillIdList.Add(info.id);// 将技能id添加到列表中 } // 固定技能槽的位置 if (skil_info.Can_set_key == false) { SkillManager.Instance.SetOpeningSkill((DBCommandList.OPFlag)skil_info.FixedKeyPos, skil_info.Sub_id); } else { uint skill_pos = SkillHoleManager.Instance.GetOpenSkillHole(skil_info.Id); if (skill_pos != 0) { // 对应位置没有装配的时候自动设置 uint has_exist_skill_id_in_slot = SkillManager.Instance.GetNormalFitSkillId(skill_pos); bool needSetOpeningSkill = false; if (has_exist_skill_id_in_slot == 0) { needSetOpeningSkill = true; } else if (skil_info.ReplaceIds != null) { DBDataAllSkill.AllSkillInfo all_info = db_all_skill.GetOneAllSkillInfo_byActiveSkillId(has_exist_skill_id_in_slot); if (all_info != null && skil_info.ReplaceIds.Contains(all_info.Id)) {//技能升级,直接替换 needSetOpeningSkill = true; } } if (needSetOpeningSkill) { SkillManager.Instance.SetOpeningSkill((DBCommandList.OPFlag)skill_pos, skil_info.Sub_id); } } } if (info.id == new_active_skill_id)// 是新获取的技能,需要进行动画表现 { //GameDebug.LogError("[OpenNewSkill] info.id = " + info.id); SkillHoleManager.Instance.OpenNewSkill(info.id); } else // 直接开启对应的技能孔 { //GameDebug.LogError("[OpenSkill] info.id = " + info.id); SkillHoleManager.Instance.OpenSkill(info.id); } } RefreshSkillLevel(); }
protected override void ParseData(SqliteDataReader reader) { mInfos.Clear(); mOpenSkillInfos.Clear(); DBDataAllSkill db_all_skill = DBManager.Instance.GetDB <DBDataAllSkill>(); DBPetFetterItem info; if (reader != null) { if (reader.HasRows == true) { while (reader.Read()) { info = new DBPetFetterItem(); info.PetId = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0); info.Index = DBTextResource.ParseUI_s(GetReaderString(reader, "index"), 0); info.Condition = new List <DBPet.UnLockPrePetCondition>(); List <List <uint> > str_array = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "condition")); if (str_array != null) { for (int index = 0; index < str_array.Count; ++index) { if (str_array[index] != null && str_array[index].Count >= 2) { DBPet.UnLockPrePetCondition condition = new DBPet.UnLockPrePetCondition(); condition.pet_id = str_array[index][0]; condition.step_level = str_array[index][1]; info.Condition.Add(condition); } } } info.Attr = DBTextResource.ParseDBAttrItems(GetReaderString(reader, "attr")); List <uint> skill_array = DBTextResource.ParseArrayUint(GetReaderString(reader, "skills"), ","); info.Skills = new Dictionary <uint, List <FetterSkillItem> >(); if (skill_array != null) { for (int index = 0; index < skill_array.Count; ++index) { FetterSkillItem item = new FetterSkillItem(); item.skill_id = skill_array[index]; DBDataAllSkill.AllSkillInfo skill_info = db_all_skill.GetOneAllSkillInfo(item.skill_id); uint vocation = 0; if (skill_info != null) { vocation = skill_info.Require_race; } item.vocation = vocation; if (info.Skills.ContainsKey(item.vocation) == false) { info.Skills.Add(item.vocation, new List <FetterSkillItem>()); } info.Skills[item.vocation].Add(item); mOpenSkillInfos[item.skill_id] = info; } } if (info.Skills.ContainsKey(DBDataAllSkill.CommonVocationType)) { foreach (var item in info.Skills) { if (item.Key == DBDataAllSkill.CommonVocationType) { continue; } item.Value.AddRange(info.Skills[DBDataAllSkill.CommonVocationType]); } } if (mInfos.ContainsKey(info.PetId) == false) { mInfos.Add(info.PetId, new List <DBPetFetterItem>()); } mInfos[info.PetId].Add(info); } } } foreach (var item in mInfos) { item.Value.Sort((a, b) => { if (a.Index < b.Index) { return(-1); } else if (a.Index > b.Index) { return(1); } return(0); }); } }
protected override void ParseData(SqliteDataReader reader) { mInfos.Clear(); mSortInfos.Clear(); DBDataAllSkill db_all_skill = DBManager.Instance.GetDB <DBDataAllSkill>(); DBStigmaInfo info; if (reader != null) { if (reader.HasRows == true) { while (reader.Read()) { info = new DBStigmaInfo(); info.Id = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0); info.Name = GetReaderString(reader, "name"); info.Quality = DBTextResource.ParseUI_s(GetReaderString(reader, "quality"), 0); // 品质 info.CostGoodsId = DBTextResource.ParseUI_s(GetReaderString(reader, "cost"), 0); //消耗的物品ID info.Exp = DBTextResource.ParseUI_s(GetReaderString(reader, "exp"), 0); //每次获得经验 info.Rank = DBTextResource.ParseUI_s(GetReaderString(reader, "rank"), 0); //排序规则 info.Actor_id = DBTextResource.ParseUI_s(GetReaderString(reader, "actor_id"), 0); //角色ID info.ModelLocalPos = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_pos")); info.ModelLocalScale = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_scale")); info.ModelLocalAngles = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_angles")); info.ModelParentDefaultAngles = DBTextResource.ParseVector3(GetReaderString(reader, "model_parent_default_angles")); info.ModelParentLocalPos = DBTextResource.ParseVector3(GetReaderString(reader, "model_parent_local_pos")); info.Icon = GetReaderString(reader, "icon"); //图标 List <List <uint> > skills_str_array = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "skills")); //玩家技能列表(主键是玩家职业) info.PlayerSkills = new Dictionary <uint, List <DBStigmaSkillItemSkillItem> >(); skills_str_array = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "skills")); for (int index = 0; index < skills_str_array.Count; ++index) { if (skills_str_array[index].Count >= 2) { uint skill_id = skills_str_array[index][0]; DBDataAllSkill.AllSkillInfo skill_info = db_all_skill.GetOneAllSkillInfo(skill_id); if (skill_info != null) { uint vocation = skill_info.Require_race; DBStigmaSkillItemSkillItem tmp_DBStigmaSkillItemSkillItem = new DBStigmaSkillItemSkillItem(); tmp_DBStigmaSkillItemSkillItem.skill_id = skill_id; tmp_DBStigmaSkillItemSkillItem.open_level = skills_str_array[index][1]; if (info.PlayerSkills.ContainsKey(vocation) == false) { info.PlayerSkills.Add(vocation, new List <DBStigmaSkillItemSkillItem>()); } info.PlayerSkills[vocation].Add(tmp_DBStigmaSkillItemSkillItem); } else { GameDebug.LogError(string.Format("Can't find the DBAllSkill = {0}", skill_id)); } } else { GameDebug.LogError(string.Format("There is error player_skills (id = {0}) in DBStigma", info.Id)); } } if (info.PlayerSkills.ContainsKey(DBDataAllSkill.CommonVocationType)) { foreach (var item in info.PlayerSkills) { if (item.Key == DBDataAllSkill.CommonVocationType) { continue; } item.Value.AddRange(info.PlayerSkills[DBDataAllSkill.CommonVocationType]); } } mInfos.Add(info.Id, info); mSortInfos.Add(info); } } } mSortInfos.Sort((a, b) => { if (a.Rank < b.Rank) { return(-1); } else if (a.Rank > b.Rank) { return(1); } return(0); }); }
protected override void ParseData(SqliteDataReader reader) { mInfos.Clear(); mSortInfos.Clear(); mEvolutionIds.Clear(); DBDataAllSkill db_all_skill = DBManager.Instance.GetDB <DBDataAllSkill>(); PetInfo info; if (reader != null) { if (reader.HasRows == true) { while (reader.Read()) { info = new PetInfo(); info.Id = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0); info.Desc = GetReaderString(reader, "desc"); //说明 info.UnlockType = (PetUnLockType)DBTextResource.ParseUI_s(GetReaderString(reader, "unlock_type"), 0); //解锁方式 if (info.UnlockType == PetUnLockType.PlayerLevel) { info.UnlockPlayerLevel = DBTextResource.ParseUI_s(GetReaderString(reader, "unlock_condition"), 0); //解锁条件 } else if (info.UnlockType == PetUnLockType.CostGoods) { info.UnLockGoodsConditionArray = new List <UnLockGoodsCondition>(); List <List <uint> > str_array = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "unlock_condition")); for (int index = 0; index < str_array.Count; ++index) { if (str_array[index].Count >= 2) { UnLockGoodsCondition tmp_item = new UnLockGoodsCondition(); tmp_item.goods_id = str_array[index][0]; tmp_item.goods_num = str_array[index][1]; info.UnLockGoodsConditionArray.Add(tmp_item); } else { GameDebug.LogError(string.Format("There is error unlock_condition (id = {0}) in data_pet", info.Id)); } } } else if (info.UnlockType == PetUnLockType.PrePetDegree) { List <uint> str_array = DBTextResource.ParseArrayUint(GetReaderString(reader, "unlock_condition"), ","); if (str_array != null && str_array.Count >= 2) { info.UnLockPrePetConditionData = new UnLockPrePetCondition(); info.UnLockPrePetConditionData.pet_id = str_array[0]; info.UnLockPrePetConditionData.step_level = str_array[1]; } else { GameDebug.LogError(string.Format("There is error unlock_condition (id = {0}) in data_pet", info.Id)); } } else if (info.UnlockType == PetUnLockType.EvolutionReplace) { info.PreIdInEvolution = DBTextResource.ParseUI_s(GetReaderString(reader, "unlock_condition"), 0); info.HasCheckEvolution = false; info.FirstPetIdInEvolution = 0; } else { } info.Unlock_desc = GetReaderString(reader, "unlock_desc"); //解锁说明 info.Rank = DBTextResource.ParseUI_s(GetReaderString(reader, "rank"), 0); //排序规则 info.Actor_id = DBTextResource.ParseUI_s(GetReaderString(reader, "actor_id"), 0); //角色ID info.Quality = DBTextResource.ParseUI_s(GetReaderString(reader, "quality"), 1); //品质 info.MaxQual = DBTextResource.ParseUI_s(GetReaderString(reader, "max_qual"), 1); //最高升品 info.MaxStep = DBTextResource.ParseUI_s(GetReaderString(reader, "max_step"), 1); //最高升阶 info.Head_icon = GetReaderString(reader, "head_icon"); // 头像 info.ModelCameraOffset = DBTextResource.ParseVector3(GetReaderString(reader, "model_camera_offset")); info.ModelCameraOffsetInfo = DBTextResource.ParseVector3(GetReaderString(reader, "model_camera_offset_info")); info.ModelCameraRotate = DBTextResource.ParseVector3(GetReaderString(reader, "model_camera_rotate")); info.ModelDefaultAngle = DBTextResource.ParseVector3(GetReaderString(reader, "model_default_angle")); info.ModelCameraOffset2 = DBTextResource.ParseVector3(GetReaderString(reader, "model_camera_offset_2")); info.ModelCameraOffset3 = DBTextResource.ParseVector3(GetReaderString(reader, "model_camera_offset_3")); info.ModelLocalPos = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_pos")); info.ModelLocalScale = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_scale")); info.ModelLocalAngles = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_angles")); info.ModelLocalPos2 = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_pos2")); info.ModelLocalScale2 = DBTextResource.ParseVector3(GetReaderString(reader, "model_local_scale2")); info.ModelShowModelOffset = DBTextResource.ParseVector3(GetReaderString(reader, "model_show_model_offset")); info.ModelShowCameraRotation = DBTextResource.ParseVector3(GetReaderString(reader, "model_show_camera_rotation")); info.ModelShowCameraOffset = DBTextResource.ParseVector3(GetReaderString(reader, "model_show_camera_offset")); info.ModelShowScale = DBTextResource.ParseVector3(GetReaderString(reader, "model_show_scale")); //技能列表 info.AllSkills = new List <PetSkillItem>(); info.Skills = new List <PetSkillItem>(); info.PassivitySkills = new List <PetSkillItem>(); List <List <uint> > skills_str_array = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "skills")); for (int index = 0; index < skills_str_array.Count; ++index) { if (skills_str_array[index].Count >= 2) { PetSkillItem tmp_PetSkillItem = new PetSkillItem(); tmp_PetSkillItem.skill_id = skills_str_array[index][0]; tmp_PetSkillItem.open_degree = skills_str_array[index][1]; info.AllSkills.Add(tmp_PetSkillItem); DBDataAllSkill.AllSkillInfo skill_info = db_all_skill.GetOneAllSkillInfo(tmp_PetSkillItem.skill_id); if (skill_info != null) { if (skill_info.SkillType == DBDataAllSkill.SKILL_TYPE.Active) { info.Skills.Add(tmp_PetSkillItem); } else if (skill_info.SkillType == DBDataAllSkill.SKILL_TYPE.Passive) { info.PassivitySkills.Add(tmp_PetSkillItem); } } else { GameDebug.LogError(string.Format("[DBPet] can't find the skill! pet_id = {0} skill_id = {1}", info.Id, tmp_PetSkillItem.skill_id)); } } else { GameDebug.LogError(string.Format("There is error skills (id = {0}) in data_pet", info.Id)); } } //玩家技能 info.PlayerSkills = new Dictionary <uint, List <PetSkillItem> >(); skills_str_array = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "player_skills")); for (int index = 0; index < skills_str_array.Count; ++index) { if (skills_str_array[index].Count >= 2) { PetSkillItem tmp_PetSkillItem = new PetSkillItem(); tmp_PetSkillItem.skill_id = skills_str_array[index][0]; tmp_PetSkillItem.open_degree = skills_str_array[index][1]; DBDataAllSkill.AllSkillInfo skill_info = db_all_skill.GetOneAllSkillInfo(tmp_PetSkillItem.skill_id); uint vocation = 0; if (skill_info != null) { vocation = skill_info.Require_race; } if (info.PlayerSkills.ContainsKey(vocation) == false) { info.PlayerSkills.Add(vocation, new List <PetSkillItem>()); } info.PlayerSkills[vocation].Add(tmp_PetSkillItem); } else { GameDebug.LogError(string.Format("There is error player_skills (id = {0}) in data_pet", info.Id)); } } if (info.PlayerSkills.ContainsKey(DBDataAllSkill.CommonVocationType)) { foreach (var item in info.PlayerSkills) { if (item.Key == DBDataAllSkill.CommonVocationType) { continue; } item.Value.AddRange(info.PlayerSkills[DBDataAllSkill.CommonVocationType]); } } //info.Icon = GetReaderString(reader, "icon"); mInfos.Add(info.Id, info); mSortInfos.Add(info); } } } int no_deal_evolution_count = 0; while (true) { no_deal_evolution_count = 0; foreach (var item in mInfos) { if (item.Value.UnlockType != PetUnLockType.EvolutionReplace) { continue; } if (item.Value.HasCheckEvolution) { continue;//已经处理过 } if (item.Value.PreIdInEvolution == 0) {//第一个进化的ID uint first_pet_id = item.Value.Id; mEvolutionIds[first_pet_id] = new List <uint>(); mEvolutionIds[first_pet_id].Add(item.Value.Id); item.Value.HasCheckEvolution = true; item.Value.FirstPetIdInEvolution = first_pet_id; } else if (mInfos.ContainsKey(item.Value.PreIdInEvolution) && mInfos[item.Value.PreIdInEvolution].HasCheckEvolution) {//非第一个进化的ID且前置进化ID已经计算过 uint first_pet_id = mInfos[item.Value.PreIdInEvolution].FirstPetIdInEvolution; mEvolutionIds[first_pet_id].Add(item.Value.Id); item.Value.HasCheckEvolution = true; item.Value.FirstPetIdInEvolution = first_pet_id; } else//后续循环处理 { no_deal_evolution_count++; } } if (no_deal_evolution_count <= 0) { break; } } mSortInfos.Sort((a, b) => { if (a.Rank < b.Rank) { return(-1); } else if (a.Rank > b.Rank) { return(1); } if (a.Id < b.Id) { return(-1); } else if (a.Id > b.Id) { return(1); } return(0); }); }