protected override void ParseData(SqliteDataReader reader) { mGemInfos.Clear(); GemInfo gemInfo = null; if (reader != null) { if (reader.HasRows == true) { while (reader.Read()) { gemInfo = new GemInfo(); gemInfo.Id = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0); gemInfo.Type = DBTextResource.ParseBT_s(GetReaderString(reader, "type"), 0); gemInfo.Lv = DBTextResource.ParseUS_s(GetReaderString(reader, "lv"), 0); gemInfo.NextGemId = DBTextResource.ParseUI_s(GetReaderString(reader, "next_gem_id"), 0); gemInfo.Attrs = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "attr")); gemInfo.TypeName = GetReaderString(reader, "type_name"); #if UNITY_EDITOR if (mGemInfos.ContainsKey(gemInfo.Id)) { GameDebug.LogError(string.Format("[{0}]表重复添加的域id[{1}]", mTableName, gemInfo.Id)); continue; } #endif mGemInfos.Add(gemInfo.Id, gemInfo); } } } }
protected override void ParseData(SqliteDataReader reader) { mTasksData.Clear(); mTasksDataByType.Clear(); // 任务不做预加载了 if (reader != null) { if (reader.HasRows == true) { while (reader.Read()) { ushort taskType = DBTextResource.ParseUS_s(GetReaderString(reader, "type"), 0); if (taskType == GameConst.QUEST_MAIN || taskType == GameConst.QUEST_ESCORT) { try { ReadReader(reader); } catch (System.Exception ex) { GameDebug.LogError("Read task db error, msg:" + ex.Message); } } } } } }
protected override void ParseData(SqliteDataReader reader) { base.ParseData(reader); mSkillInfos.Clear(); int fieldCount = reader.FieldCount; while (reader.Read()) { SkillBasicInfo info = new SkillBasicInfo(); for (int i = 0; i < fieldCount; i++) { string rawName = reader.GetName(i); if (rawName == "id") { info.Id = DBTextResource.ParseUI(reader.GetString(i)); } else if (rawName == "show_in_ui") { info.ShowInUI = DBTextResource.ParseUI(reader.GetString(i)); } else if (rawName == "name") { info.Name = reader.GetString(i); } else if (rawName == "type") { info.Type = DBTextResource.ParseUS_s(reader.GetString(i), 1); } else if (rawName == "sub_type") { info.SubType = DBTextResource.ParseUS_s(reader.GetString(i), 1); } else if (rawName == "icon") { info.Icon = reader.GetString(i); } else if (rawName == "skill_type_descript") { info.SkillTypeDescript = reader.GetString(i); } } mSkillInfos.Add(info.Id, info); } }
protected override void ParseData(SqliteDataReader reader) { mEngravenfos.Clear(); EngraveInfo gemInfo = null; if (reader != null) { if (reader.HasRows == true) { while (reader.Read()) { gemInfo = new EngraveInfo(); gemInfo.Id = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0); gemInfo.Type = DBTextResource.ParseBT_s(GetReaderString(reader, "type"), 0); gemInfo.Lv = DBTextResource.ParseUS_s(GetReaderString(reader, "lv"), 0); gemInfo.NextEngraveId = DBTextResource.ParseUI_s(GetReaderString(reader, "next_engrave_id"), 0); gemInfo.Attrs = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "attr")); mEngravenfos.Add(gemInfo.Id, gemInfo); } } } }
ActorData GetActorInfo(uint id) { string query_str = string.Format("SELECT * FROM {0} WHERE {0}.{1}=\"{2}\"", mTableName, "id" , id.ToString()); var table_reader = DBManager.Instance.ExecuteSqliteQueryToReader(GlobalConfig.DBFile, mTableName, query_str); if (table_reader == null) { return null; } if (!table_reader.HasRows) { table_reader.Close(); table_reader.Dispose(); return null; } if (!table_reader.Read()) { table_reader.Close(); table_reader.Dispose(); return null; } ActorData ad = new ActorData(); ad.name = GetReaderString(table_reader, "name"); ad.vocation = DBTextResource.ParseBT(GetReaderString(table_reader, "vocation")); ad.level = DBTextResource.ParseUI(GetReaderString(table_reader, "level")); ad.color = (Monster.QualityColor)DBTextResource.ParseBT_s(GetReaderString(table_reader, "color"), 0); ; ad.type = DBTextResource.ParseBT(GetReaderString(table_reader, "type")); ad.war_tag = DBTextResource.ParseBT(GetReaderString(table_reader, "war_tag")); ad.race_id = DBTextResource.ParseUI(GetReaderString(table_reader, "race_id")); ad.skill_count = DBTextResource.ParseBT(GetReaderString(table_reader, "skill_count")); if (ad.skill_count > 0) { ad.skill_idx = new uint[ad.skill_count]; ad.cast_rate = new byte[ad.skill_count]; for (int k = 0; k < ad.skill_count; ++k) { ad.skill_idx[k] = DBTextResource.ParseUI_s(GetReaderString(table_reader, string.Format("skill_idx_{0}", k)), 0); ad.cast_rate[k] = DBTextResource.ParseBT(GetReaderString(table_reader, string.Format("cast_rate_{0}", k))); } } ad.model_id = DBTextResource.ParseUI(GetReaderString(table_reader, "model_id")); ad.runspeed = (ushort)GetReaderFloat(table_reader, "runspeed"); ad.motion_radius = DBTextResource.ParseBT(GetReaderString(table_reader, "motion_radius")); ad.behaviour_tree = GetReaderString(table_reader, "behaviour_tree"); ad.summon_behaviour_tree = GetReaderString(table_reader, "summon_behaviour_tree"); ad.attack_rotaion = DBTextResource.ParseBT(GetReaderString(table_reader, "attack_rotaion")); ad.hp_bar_count = DBTextResource.ParseBT(GetReaderString(table_reader, "hp_bar_count")); ad.gravity = DBTextResource.ParseUS_s(GetReaderString(table_reader, "gravity"), DBActor.Gravity); ad.dead_notify = DBTextResource.ParseByteArray(GetReaderString(table_reader, "dead_notify")); ad.spawn_timeline = DBTextResource.ParseUI(GetReaderString(table_reader, "spawn_timeline")); ad.dead_timeline = DBTextResource.ParseUI(GetReaderString(table_reader, "dead_timeline")); string isHideShadow = GetReaderString(table_reader, "is_hide_shadow"); if (isHideShadow == string.Empty || isHideShadow == "0") { ad.is_hide_shadow = false; } else { ad.is_hide_shadow = true; } string isHideSelectEffect = GetReaderString(table_reader, "is_hide_select_effect"); if (isHideSelectEffect == string.Empty || isHideSelectEffect == "0") { ad.is_hide_select_effect = false; } else { ad.is_hide_select_effect = true; } ad.attr_param = DBTextResource.ParseUI_s(GetReaderString(table_reader, "attr_param"), 0); ad.default_actor_id = DBTextResource.ParseUI_s(GetReaderString(table_reader, "default_actor_id"), 0); data[id] = ad; table_reader.Close(); table_reader.Dispose(); return ad; }
TaskDefine ReadReader(SqliteDataReader reader) { ushort taskType = DBTextResource.ParseUS_s(GetReaderString(reader, "type"), 0); TaskDefine define = new TaskDefine(); define.Id = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0); define.DescriptionBytes = GetReaderBytes(reader, "description"); define.NameBytes = GetReaderBytes(reader, "name"); define.Type = taskType; define.SubType = DBTextResource.ParseUI_s(GetReaderString(reader, "sub_type"), 0); define.RequestLevelMin = DBTextResource.ParseI_s(GetReaderString(reader, "lv_min"), 0); define.PreviousId = DBTextResource.ParseUI_s(GetReaderString(reader, "pre_id"), 0); define.NextId = DBTextResource.ParseUI_s(GetReaderString(reader, "next_id"), 0); define.NextId = DBTextResource.ParseUI_s(GetReaderString(reader, "next_id"), 0); string serverStepRawsString = GetReaderString(reader, "goals"); string clientStepRawsString = GetReaderString(reader, "steps"); string navigationPointsRawsString = GetReaderString(reader, "navigation_points"); define.Steps = TaskDefine.TaskStep.CreateStepsByRawString(serverStepRawsString, clientStepRawsString, navigationPointsRawsString); if (define.Steps == null || define.Steps.Count == 0) { GameDebug.LogError("Parse task " + define.Id + " error, step is empty!!!"); } define.RewardIds = DBTextResource.ParseArrayUint(GetReaderString(reader, "reward_ids"), ","); define.GetSkills = DBTextResource.ParseArrayUint(GetReaderString(reader, "get_skills"), ","); define.IsShowGetSkillProgress = DBTextResource.ParseI_s(GetReaderString(reader, "is_show_get_skill_progress"), 0) == 0 ? false : true; define.ReceiveDialogId = DBTextResource.ParseUI_s(GetReaderString(reader, "receive_dialog_id"), 0); define.SubmitDialogId = DBTextResource.ParseUI_s(GetReaderString(reader, "submit_dialog_id"), 0); define.ReceiveNpc = NpcScenePosition.Make(GetReaderString(reader, "receive_npc")); define.SubmitNpc = NpcScenePosition.Make(GetReaderString(reader, "submit_npc")); define.AutoRunType = (TaskDefine.EAutoRunType)DBTextResource.ParseBT_s(GetReaderString(reader, "auto_run"), 0); define.ShowPriority = DBManager.Instance.GetDB <DBTaskPriority>().GetTaskPriority((int)taskType); define.ShowPriority2 = DBManager.Instance.GetDB <DBTaskPriority>().GetTaskPriority2((int)taskType); string raw = GetReaderString(reader, "is_temporary_on_top"); if (string.IsNullOrEmpty(raw) == true || raw == "0") { define.IsTemporaryOnTop = false; } else { define.IsTemporaryOnTop = true; } string npcsRawString = GetReaderString(reader, "create_npcs_when_received"); define.CreateNpcsWhenReceived = TaskDefine.MakeNpcScenePositions(npcsRawString); npcsRawString = GetReaderString(reader, "delete_npcs_when_received"); define.DeleteNpcsWhenReceived = TaskDefine.MakeNpcScenePositions(npcsRawString); npcsRawString = GetReaderString(reader, "create_npcs_when_done"); define.CreateNpcsWhenDone = TaskDefine.MakeNpcScenePositions(npcsRawString); npcsRawString = GetReaderString(reader, "delete_npcs_when_done"); define.DeleteNpcsWhenDone = TaskDefine.MakeNpcScenePositions(npcsRawString); define.FollowNpcs = TaskDefine.MakeNpcScenePositions(GetReaderString(reader, "follow_npcs")); define.CanUseBoots = (DBTextResource.ParseI_s(GetReaderString(reader, "can_use_boots"), 0) > 0); define.ReceivedTimelineId = DBTextResource.ParseUI_s(GetReaderString(reader, "received_timeline_id"), 0); define.SubmitedTimelineId = DBTextResource.ParseUI_s(GetReaderString(reader, "submited_timeline_id"), 0); raw = GetReaderString(reader, "cost"); if (string.IsNullOrEmpty(raw) == false) { define.Costs = DBTextResource.ParseArrayStringString(raw); } raw = GetReaderString(reader, "show_reward_goods_id"); List <List <uint> > showRewardGoodsIdConfigs = DBTextResource.ParseArrayUintUint(raw); define.ShowRewardGoodsIds = new Dictionary <uint, uint>(); define.ShowRewardGoodsIds.Clear(); define.ShowRewardGoodsNums = new Dictionary <uint, uint>(); define.ShowRewardGoodsNums.Clear(); define.ShowRewardGoodsIsBinds = new Dictionary <uint, byte>(); define.ShowRewardGoodsIsBinds.Clear(); uint index = 1; foreach (List <uint> showRewardGoodsIdConfig in showRewardGoodsIdConfigs) { define.ShowRewardGoodsIds[index] = showRewardGoodsIdConfig[0]; define.ShowRewardGoodsNums[index] = showRewardGoodsIdConfig[1]; define.ShowRewardGoodsIsBinds[index] = (byte)showRewardGoodsIdConfig[2]; ++index; } mTasksData.Add(define.Id, define); if (mTasksDataByType.ContainsKey(define.Type) == true) { mTasksDataByType[define.Type].Add(define.Id, define); } else { Dictionary <uint, TaskDefine> taskDefines = new Dictionary <uint, TaskDefine>(); taskDefines.Clear(); taskDefines.Add(define.Id, define); mTasksDataByType.Add(define.Type, taskDefines); } return(define); }
protected override void ParseData(SqliteDataReader reader) { if (reader == null || !reader.HasRows) { return; } SysConfig config = null; while (reader.Read()) { var id = DBTextResource.ParseUI(GetReaderString(reader, "sys_id")); config = new SysConfig(id); var sys_title = GetReaderString(reader, "sys_title"); var level = DBTextResource.ParseUS_s(GetReaderString(reader, "lv_open"), 0); string taskTypeStr = GetReaderString(reader, "task_limit"); if (string.IsNullOrEmpty(taskTypeStr)) { taskTypeStr = "0"; } var task_type = (ESysTaskType)Enum.Parse(typeof(ESysTaskType), taskTypeStr); var task_id = DBTextResource.ParseUI_s(GetReaderString(reader, "task_args"), 0); string positionStr = GetReaderString(reader, "position"); if (string.IsNullOrEmpty(positionStr)) { positionStr = "0"; } var pos = (ESysBtnPos)Enum.Parse(typeof(ESysBtnPos), positionStr); uint sub_pos = DBTextResource.ParseUI_s(GetReaderString(reader, "sub_pos"), 0); string fixedPosStr = GetReaderString(reader, "fixed_pos"); if (string.IsNullOrEmpty(fixedPosStr)) { fixedPosStr = "0"; } var is_fixed = (ESysBtnFixType)DBTextResource.ParseUI_s(fixedPosStr, 1); bool show_bg = DBTextResource.ParseUI_s(GetReaderString(reader, "show_bg"), 0) == 1; uint is_activity = DBTextResource.ParseUI_s(GetReaderString(reader, "is_activity"), 0); var desc = GetReaderString(reader, "desc"); var btn_sprite = GetReaderString(reader, "btn_spr"); var btn_text = GetReaderString(reader, "btn_text"); var sort_order = DBTextResource.ParseBT_s(GetReaderString(reader, "sort_order"), 0); var transfer_limit = DBTextResource.ParseUI_s(GetReaderString(reader, "transfer_limit"), 0); var not_open_tips = GetReaderString(reader, "not_open_tips"); var main_ui_btn_id = DBTextResource.ParseUI_s(GetReaderString(reader, "main_ui_btn_id"), 0); config.Init(level, task_type, task_id, pos, sub_pos, is_fixed, show_bg, is_activity == 1, desc, btn_sprite, btn_text, sort_order, transfer_limit, not_open_tips, sys_title, main_ui_btn_id); config.NeedAnim = DBTextResource.ParseUI_s(GetReaderString(reader, "is_need_anim"), 0) == 0 ? false : true; if (pos == ESysBtnPos.NONE) // 当在主ui上没有按钮图标的时候,也一定不需要播放开启的动画 { if (config.NeedAnim) { config.NeedAnim = false; GameDebug.LogError(string.Format("sys:{0} 在主ui上没有图标, 却配置了开启动画", id)); } } config.InitNeedShow = DBTextResource.ParseUI_s(GetReaderString(reader, "is_need_show"), 0) == 0 ? false : true; config.PatchId = DBTextResource.ParseI_s(GetReaderString(reader, "patch_id"), 0); config.HideBtnWhenActNotOpen = DBTextResource.ParseUI_s(GetReaderString(reader, "hide_btn_when_act_not_open"), 0) == 0 ? false : true; config.SysIdClosePresent = DBTextResource.ParseUI_s(GetReaderString(reader, "sys_id_close_present"), 0); // 如果有系统开放关联配置,需要将数据存在另外的字典中 if (config.SysIdClosePresent != 0) { List <uint> notifySysIdList = null; if (!mConfigRelation.TryGetValue(config.SysIdClosePresent, out notifySysIdList)) { notifySysIdList = new List <uint>(); mConfigRelation[config.SysIdClosePresent] = notifySysIdList; } if (!notifySysIdList.Contains(config.Id)) { notifySysIdList.Add(config.Id); } } config.TabOrder = DBTextResource.ParseUI_s(GetReaderString(reader, "tab_order"), 0); config.DropDown = DBTextResource.ParseArrayUint(GetReaderString(reader, "drop_down"), ","); config.DropDownType = DBTextResource.ParseUI(GetReaderString(reader, "drop_down_type")); config.UIBehavior = DBTextResource.ParseArrayString(GetReaderString(reader, "ui_behavior")); config.TimeLimitStr = GetReaderString(reader, "time_limit"); config.CustomCondition = DBTextResource.ParseUI_s(GetReaderString(reader, "custom_condition"), 0) == 0 ? false : true; mConfigList.Add(config); mConfigMap[config.Id] = config; } mConfigList.Sort(); }
/// <summary> /// 获取某个副本的信息 /// </summary> /// <returns>The instance info.</returns> /// <param name="id">Identifier.</param> public InstanceInfo GetInstanceInfo(uint id) { InstanceInfo info = null; if (mInstanceInfos.TryGetValue(id, out info)) { return(info); } string queryStr = string.Format("SELECT * FROM {0} WHERE {0}.{1}=\"{2}\"", mTableName, "id", id.ToString()); var table_reader = DBManager.Instance.ExecuteSqliteQueryToReader(GlobalConfig.DBFile, mTableName, queryStr); if (table_reader == null) { mInstanceInfos.Add(id, null); return(null); } if (!table_reader.HasRows) { mInstanceInfos.Add(id, null); table_reader.Close(); table_reader.Dispose(); return(null); } if (!table_reader.Read()) { mInstanceInfos.Add(id, null); table_reader.Close(); table_reader.Dispose(); return(null); } info = new InstanceInfo(); Type gameConstType = typeof(GameConst); info.mId = DBTextResource.ParseUI_s(GetReaderString(table_reader, "id"), 0); info.mMaxTime = DBTextResource.ParseI(GetReaderString(table_reader, "max_time")); info.mNeedGoods = DBTextResource.ParseDictionaryUintUint(GetReaderString(table_reader, "need_goods")); info.mDyNeedGoods = DBTextResource.ParseArrayUintUint(GetReaderString(table_reader, "dy_need_goods")); info.mNeedLv = DBTextResource.ParseUS_s(GetReaderString(table_reader, "need_lv"), 0); info.mLvUpLimit = DBTextResource.ParseUS_s(GetReaderString(table_reader, "lv_up_limit"), 0); info.mRecommendAttrs = ParseRecommendAttrs(GetReaderString(table_reader, "recommend_attrs")); info.mSingleEnter = DBTextResource.ParseI(GetReaderString(table_reader, "single_enter")) == 1 ? true : false; string mbCountStr = GetReaderString(table_reader, "mb_count"); ushort mbCount = 0; /* 进入人数四种要求: * 0:可单人,也可以任意组队(不用配) * 1:必须单人(可以没有队伍,也可以在只有他一个人的队伍中) * N(N>=2):必须N人以上组队 * {M,N}:大于等于M且小于等于N */ if (string.IsNullOrEmpty(mbCountStr) == true) { info.mMinMemberCount = 0; info.mMaxMemberCount = GameConstHelper.GetShort("GAME_TEAM_MEMBER_LIMIT"); } else if (ushort.TryParse(mbCountStr, out mbCount) == true) { info.mMinMemberCount = mbCount; if (info.mMinMemberCount == 0) { info.mMaxMemberCount = GameConstHelper.GetShort("GAME_TEAM_MEMBER_LIMIT"); } else if (info.mMinMemberCount == 1) { info.mMinMemberCount = 0; info.mMaxMemberCount = 1; } else { info.mMaxMemberCount = GameConstHelper.GetShort("GAME_TEAM_MEMBER_LIMIT"); } } else { List <uint> mbCountList = DBTextResource.ParseArrayUint(mbCountStr, ","); if (mbCountList.Count >= 2) { info.mMinMemberCount = (ushort)mbCountList[0]; info.mMaxMemberCount = (ushort)mbCountList[1]; } } info.mSweepCosts = DBTextResource.ParseDictionaryUintUint(GetReaderString(table_reader, "sweep_costs")); info.mSweepLimit = DBTextResource.ParseVector2(GetReaderString(table_reader, "sweep_limit")); info.mName = GetReaderString(table_reader, "name"); //System.Reflection.FieldInfo fieldInfo = null; //string warTypeStr = GetReaderString(table_reader, "war_type"); //if (mGameConstUintValueCache.ContainsKey(warTypeStr) == true) //{ // info.mWarType = mGameConstUintValueCache[warTypeStr]; //} //else //{ // fieldInfo = gameConstType.GetField(warTypeStr); // if (fieldInfo != null) // { // info.mWarType = Convert.ToUInt32(fieldInfo.GetValue(null)); // mGameConstUintValueCache[warTypeStr] = info.mWarType; // } // else // { // GameDebug.LogError("Can not find war type " + warTypeStr + " in db instance!!!"); // } //} //string warsubTypeStr = GetReaderString(table_reader, "war_subtype"); //if (string.IsNullOrEmpty(warsubTypeStr) == false) //{ // if (mGameConstUintValueCache.ContainsKey(warsubTypeStr) == true) // { // info.mWarSubType = mGameConstUintValueCache[warsubTypeStr]; // } // else // { // fieldInfo = gameConstType.GetField(warsubTypeStr); // if (fieldInfo != null) // { // info.mWarSubType = Convert.ToUInt32(fieldInfo.GetValue(null)); // mGameConstUintValueCache[warsubTypeStr] = info.mWarSubType; // } // else // { // GameDebug.LogError("Can not find sub war type " + warsubTypeStr + " in db instance!!!"); // } // } //} uint warType = 0; uint warSubType = 0; string warTypeStr = GetReaderString(table_reader, "war_type"); string warSubTypeStr = GetReaderString(table_reader, "war_subtype"); ConvertWarType(warTypeStr, warSubTypeStr, out warType, out warSubType); info.mWarType = warType; info.mWarSubType = warSubType; info.mDesc = GetReaderString(table_reader, "desc"); info.mStages.Clear(); string stagesStr = GetReaderString(table_reader, "stages"); List <string> stages = DBTextResource.ParseArrayString(stagesStr); for (int j = 0; j < stages.Count; j++) { if (!String.IsNullOrEmpty(stages[j])) { info.mStages.Add(DBTextResource.ParseUI(stages[j])); } } info.mPKType = DBTextResource.ParseI(GetReaderString(table_reader, "pk_type")); info.mReviveTimes = DBTextResource.ParseUS(GetReaderString(table_reader, "revive_times")); info.mReadyCountDown = DBTextResource.ParseUS(GetReaderString(table_reader, "ready_count_down")); info.mResultCountDown = DBTextResource.ParseUI(GetReaderString(table_reader, "result_count_down")); info.mIsReloadSceneWhenTheSame = DBTextResource.ParseI(GetReaderString(table_reader, "is_reload_scene_when_the_same")) == 0 ? false : true; info.mMinPos = DBTextResource.ParseVector2(GetReaderString(table_reader, "mini_map_pos_x")); info.mMaxPos = DBTextResource.ParseVector2(GetReaderString(table_reader, "mini_map_pos_y")); info.mMiniMapWidth = info.mMaxPos.x - info.mMinPos.x; info.mMiniMapHeight = info.mMaxPos.y - info.mMinPos.y; info.mMiniMapName = GetReaderString(table_reader, "mini_map"); info.mIsCanOpenMiniMap = DBTextResource.ParseI(GetReaderString(table_reader, "is_open_mini_map")) == 0 ? false : true; string isShowMarkStr = GetReaderString(table_reader, "is_show_mark"); if (isShowMarkStr == string.Empty || isShowMarkStr == "0") { info.mIsShowMark = false; } else { info.mIsShowMark = true; } string isAutoFightStr = GetReaderString(table_reader, "is_auto_fight"); if (isAutoFightStr == string.Empty || isAutoFightStr == "0") { info.mIsAutoFight = false; } else { info.mIsAutoFight = true; } string canNotRideStr = GetReaderString(table_reader, "can_not_ride"); if (canNotRideStr == string.Empty || canNotRideStr == "0") { info.mCanNotRide = false; } else { info.mCanNotRide = true; } info.mRewardIds = DBTextResource.ParseArrayUint(GetReaderString(table_reader, "reward_1"), ","); info.mShowRewardIds = DBTextResource.ParseArrayUint(GetReaderString(table_reader, "show_rewards"), ","); info.mNeedTaskId = DBTextResource.ParseUI_s(GetReaderString(table_reader, "need_task_id"), 0); info.mPlanesInstanceId = DBTextResource.ParseUI_s(GetReaderString(table_reader, "planes_dg_id"), 0); info.mStartTimeline = DBTextResource.ParseUI_s(GetReaderString(table_reader, "start_timeline"), 0); info.mGuardedNpcId = DBTextResource.ParseUI_s(GetReaderString(table_reader, "npc_id"), 0); string showBossAssStr = GetReaderString(table_reader, "show_boss_assistant"); if (showBossAssStr == string.Empty || showBossAssStr == "0") { info.mShowBossAssistant = false; } else { info.mShowBossAssistant = true; } info.mForbidJumpOutAnimationOut = DBTextResource.ParseUI_s(GetReaderString(table_reader, "forbid_jump_out_animation_out"), 0) == 1; info.mForbidWaterWaveEffect = DBTextResource.ParseUI_s(GetReaderString(table_reader, "forbid_water_wave_effect"), 0) == 1; info.mIsCanSendPosition = DBTextResource.ParseUI_s(GetReaderString(table_reader, "is_can_send_position"), 0) == 1; info.mMergeLevel = DBTextResource.ParseUI_s(GetReaderString(table_reader, "merge_level"), 0); info.mMergeConsume = DBTextResource.ParseDictionaryUintUint(GetReaderString(table_reader, "merge_consume")); #if UNITY_EDITOR if (mInstanceInfos.ContainsKey(info.mId)) { GameDebug.LogError(string.Format("[{0}]表重复添加的域id[{1}]", mTableName, info.mId)); table_reader.Close(); table_reader.Dispose(); return(info); } #endif mInstanceInfos.Add(info.mId, info); table_reader.Close(); table_reader.Dispose(); return(info); }
protected override void ParseData(SqliteDataReader reader) { mMinLevelSkillDict.Clear(); mInfos.Clear(); mInfosByType.Clear(); mInfosByActiveSkillId.Clear(); // mInfosCanSetKey.Clear(); // mInfosNoCanSetKey.Clear(); mInfosBySetSlotType.Clear(); DBSkillSlot db_slot = DBManager.Instance.GetDB <DBSkillSlot>(); AllSkillInfo info; if (reader != null) { if (reader.HasRows == true) { while (reader.Read()) { info = new AllSkillInfo(); info.Id = DBTextResource.ParseUI_s(GetReaderString(reader, "id"), 0); info.SkillType = (SKILL_TYPE)System.Enum.Parse(typeof(SKILL_TYPE), GetReaderString(reader, "type")); info.Sub_id = DBTextResource.ParseUI_s(GetReaderString(reader, "sub_id"), 0); //主动技能ID或者被动技能ID info.SortId = DBTextResource.ParseUS_s(GetReaderString(reader, "sort_id"), 0); info.Name = GetReaderString(reader, "name"); //技能名字 info.Source = GetReaderString(reader, "source"); //技能获取途径说明 info.Desc = GetReaderString(reader, "desc"); // info.Icon = GetReaderString(reader, "icon"); info.ModelId = DBTextResource.ParseUI_s(GetReaderString(reader, "model_id"), 0); info.ModelAction = GetReaderString(reader, "model_action"); info.Require_race = DBTextResource.ParseUI_s(GetReaderString(reader, "require_race"), 0); //职业限制( 取值参见 EVocationType) info.Skill_type_descript = GetReaderString(reader, "skill_type_descript"); //技能标签 info.zhuhun_txt = GetReaderString(reader, "zhuhun_txt"); //铸魂额外配置文本 info.SetSlotType = (SET_SLOT_TYPE)DBTextResource.ParseUI_s(GetReaderString(reader, "set_slot_type"), 0); if (info.SetSlotType == SET_SLOT_TYPE.None || info.SetSlotType == SET_SLOT_TYPE.MateSKill) { info.Can_set_key = false; //能否装备到技能槽 } else { info.Can_set_key = true; } info.ReplaceIds = DBTextResource.ParseArrayUint(GetReaderString(reader, "replace_ids"), ","); info.Level = DBTextResource.ParseUI_s(GetReaderString(reader, "level"), 0); info.ShowInPanel = DBTextResource.ParseUI_s(GetReaderString(reader, "show_in_panel"), 1) == 1; info.LevelNotice = GetReaderString(reader, "level_notice"); info.FixedKeyPos = DBTextResource.ParseUI_s(GetReaderString(reader, "fixed_key_pos"), 0); info.OpenHole = DBTextResource.ParseUI_s(GetReaderString(reader, "open_hole"), 0); string raw = GetReaderString(reader, "stop_hook_when_gain"); if (string.IsNullOrEmpty(raw) == true || raw.Equals("0") == true) { info.StopHookWhenGain = false; } else { info.StopHookWhenGain = true; } info.Attrs = DBTextResource.ParseArrayUintUint(GetReaderString(reader, "attrs")); mInfos.Add(info.Id, info); if (mInfosByType.ContainsKey(info.SkillType) == false) { mInfosByType.Add(info.SkillType, new Dictionary <uint, List <AllSkillInfo> >()); } if (mInfosByType[info.SkillType].ContainsKey(info.Require_race) == false) { mInfosByType[info.SkillType].Add(info.Require_race, new List <AllSkillInfo>()); } mInfosByType[info.SkillType][info.Require_race].Add(info); if (info.SkillType == SKILL_TYPE.Active) { mInfosByActiveSkillId[info.Sub_id] = info; if (mInfosBySetSlotType.ContainsKey(info.Require_race) == false) { mInfosBySetSlotType.Add(info.Require_race, new OneVocationActiveSkillInfos(info.Require_race)); } mInfosBySetSlotType[info.Require_race].AddSkillInfo(info); db_slot.AddSlotDefaultSkillId(info.Require_race, info.OpenHole, info.Id); } if (info.Level == 1) {//首先只记录等级为1 mMinLevelSkillDict.Add(info.Id, new List <DBDataAllSkill.AllSkillInfo>()); mMinLevelSkillDict[info.Id].Add(info); } } } } foreach (var item in mInfos) { if (item.Value.Level > 1 && item.Value.ReplaceIds != null && item.Value.ReplaceIds.Count > 0) {//检测所有大于等级1的技能 for (int index = 0; index < item.Value.ReplaceIds.Count; ++index) { uint skill_id = item.Value.ReplaceIds[index]; List <DBDataAllSkill.AllSkillInfo> find_info_array = null; if (mMinLevelSkillDict.TryGetValue(skill_id, out find_info_array)) { //插入等级为1的技能列表中去 item.Value.MinLevelTotalSkillId = skill_id; //设定等级为1的技能ID find_info_array.Add(item.Value); } } } } //等级排序 foreach (var item in mMinLevelSkillDict) { item.Value.Sort((a, b) => { if (a.Level < b.Level) { return(-1); } else if (a.Level > b.Level) { return(1); } return(0); }); for (int index = 0; index < item.Value.Count; ++index) { if (index == item.Value.Count - 1) { item.Value[index].NextLevelSkillTmpl = null; } else { item.Value[index].NextLevelSkillTmpl = item.Value[index + 1]; } } } foreach (var item in mInfosByType) { if (item.Value.ContainsKey(CommonVocationType)) { foreach (var item2 in item.Value) { if (item2.Key != CommonVocationType && item2.Key != PetVocationType) { item2.Value.AddRange(item.Value[CommonVocationType]); } } } } if (mInfosBySetSlotType.ContainsKey(CommonVocationType)) { foreach (var item in mInfosBySetSlotType) { if (item.Key == PetVocationType) { continue; } if (item.Key == CommonVocationType) { continue; } foreach (var copy_item in mInfosBySetSlotType[CommonVocationType].mSkills) { if (item.Value.mSkills.ContainsKey(copy_item.Key) == false) { item.Value.mSkills.Add(copy_item.Key, new List <AllSkillInfo>()); } item.Value.mSkills[copy_item.Key].AddRange(copy_item.Value); } } } }
public GoodsInfo GetGoodsInfo(uint gid) { GoodsInfo goods_info = null; if (mGoodsInfos.TryGetValue(gid, out goods_info)) { return(goods_info); } string query = string.Format("SELECT * FROM {0} WHERE {0}.{1}=\"{2}\"", GoodsTableName, "gid", gid); var reader = DBManager.Instance.ExecuteSqliteQueryToReader(GlobalConfig.DBFile, GoodsTableName, query); if (reader == null) { GameDebug.LogError("Can not find goods info by gid " + gid + ", reader is null!!!"); mGoodsInfos[gid] = null; return(null); } if (!reader.HasRows || !reader.Read()) { GameDebug.LogError("Can not find goods info by gid " + gid); mGoodsInfos[gid] = null; reader.Close(); reader.Dispose(); return(null); } goods_info = new GoodsInfo(); goods_info.name = GetReaderString(reader, "name"); goods_info.sort_id = DBTextResource.ParseUI_s(GetReaderString(reader, "sort_id"), 0); goods_info.sort_top = DBTextResource.ParseUI_s(GetReaderString(reader, "sort_top"), 0); goods_info.type = DBTextResource.ParseBT_s(GetReaderString(reader, "type"), 0); goods_info.sub_type = DBTextResource.ParseUS_s(GetReaderString(reader, "sub_type"), 0); goods_info.color_type = DBTextResource.ParseBT_s(GetReaderString(reader, "color_type"), 0); goods_info.max_stack = DBTextResource.ParseUS_s(GetReaderString(reader, "max_stack"), 1); goods_info.effect = GetReaderString(reader, "effect"); var arg = GetReaderString(reader, "arg"); if (!string.IsNullOrEmpty(arg)) { goods_info.arg = arg.Replace(" ", ""); } else { goods_info.arg = ""; } goods_info.client_use = DBTextResource.ParseBT_s(GetReaderString(reader, "client_use"), 0); goods_info.cd_id = DBTextResource.ParseUI_s(GetReaderString(reader, "cd_id"), 0); goods_info.use_cd = DBTextResource.ParseUS_s(GetReaderString(reader, "use_cd"), 0); goods_info.use_lv = DBTextResource.ParseUI_s(GetReaderString(reader, "use_lv"), 0); goods_info.use_job = DBTextResource.ParseBT_s(GetReaderString(reader, "use_job"), 0); goods_info.use_transfer = DBTextResource.ParseBT_s(GetReaderString(reader, "use_transfer"), 0); goods_info.need_count = DBTextResource.ParseBT_s(GetReaderString(reader, "need_count"), 0); goods_info.guild_wpoint = DBTextResource.ParseUI_s(GetReaderString(reader, "guild_wpoint"), 0); goods_info.sell_price = DBTextResource.ParseUI_s(GetReaderString(reader, "sell_price"), 0); goods_info.expire_time = DBTextResource.ParseUI_s(GetReaderString(reader, "expire_time"), 0); goods_info.mktype_1 = DBTextResource.ParseBT_s(GetReaderString(reader, "mktype_1"), 0); goods_info.mktype_2 = DBTextResource.ParseBT_s(GetReaderString(reader, "mktype_2"), 0); goods_info.bind = DBTextResource.ParseBT_s(GetReaderString(reader, "bind"), 1); goods_info.price_recommend = (uint)(GetReaderFloat(reader, "price_recommend")); goods_info.price_lower_limit = GetReaderFloat(reader, "price_lower_limit"); goods_info.price_upper_limit = GetReaderFloat(reader, "price_upper_limit"); goods_info.desc = GetReaderString(reader, "desc"); goods_info.gain_text = GetReaderString(reader, "gain_text"); goods_info.gain_from = GetReaderString(reader, "gain_from"); goods_info.icon_id = DBTextResource.ParseUI_s(GetReaderString(reader, "icon_id"), 0); goods_info.is_show = DBTextResource.ParseBT_s(GetReaderString(reader, "is_show"), 0); goods_info.is_quick = DBTextResource.ParseBT_s(GetReaderString(reader, "is_quick"), 0); goods_info.is_confirmation = DBTextResource.ParseBT_s(GetReaderString(reader, "is_confirmation"), 0); goods_info.sys_id = DBTextResource.ParseUI_s(GetReaderString(reader, "sys_id"), 0); goods_info.is_mutil_use = DBTextResource.ParseBT_s(GetReaderString(reader, "is_mutil_use"), 0); goods_info.daily_use_limit = DBTextResource.ParseUS_s(GetReaderString(reader, "daily_use_limit"), 0); goods_info.is_display_goods = DBTextResource.ParseBT_s(GetReaderString(reader, "is_display_goods"), 0); goods_info.wing_exp = DBTextResource.ParseUI_s(GetReaderString(reader, "wing_exp"), 0); goods_info.show_step = DBTextResource.ParseUI_s(GetReaderString(reader, "show_step"), 0); goods_info.is_precious = DBTextResource.ParseUI_s(GetReaderString(reader, "is_precious"), 0); goods_info.discount = DBTextResource.ParseUI_s(GetReaderString(reader, "discount"), 0); goods_info.overdue_notice_time = DBTextResource.ParseUI_s(GetReaderString(reader, "overdue_notice_time"), 0); mGoodsInfos[gid] = goods_info; reader.Close(); reader.Dispose(); return(goods_info); }
/// <summary> /// 获取表格中的技能数据 /// </summary> public SkillInfoSev GetSkillInfo(uint skill_id) { SkillInfoSev skill_info = null; if (!mSkillInfoMap.TryGetValue(skill_id, out skill_info)) { string query_str = string.Format("SELECT * FROM {0} WHERE {0}.{1}=\"{2}\"", "data_skill", "id", skill_id); var table_reader = DBManager.Instance.ExecuteSqliteQueryToReader(GlobalConfig.DBFile, "data_skill", query_str); if (table_reader == null) { mSkillInfoMap[skill_id] = null; return(null); } if (!table_reader.HasRows || !table_reader.Read()) { mSkillInfoMap[skill_id] = null; table_reader.Close(); table_reader.Dispose(); return(null); } skill_info = new SkillInfoSev(); skill_info.Id = DBTextResource.ParseUI(GetReaderString(table_reader, "id")); skill_info.IsPg = DBTextResource.ParseUS_s(GetReaderString(table_reader, "is_pg"), 0) == 1; skill_info.FindTargetType = DBTextResource.ParseUS_s(GetReaderString(table_reader, "find_target"), 1); skill_info.FindTarget = skill_info.FindTargetType != 0; skill_info.TargetLimit = GetReaderString(table_reader, "target_limit"); skill_info.IsTrigger = GetReaderString(table_reader, "action_type") != "active"; skill_info.CDTime = DBTextResource.ParseUI_s(GetReaderString(table_reader, "cd"), 0); skill_info.Range = DBTextResource.ParseUI_s(GetReaderString(table_reader, "range"), 0) * 0.01f - 0.5f; // 因为服务端减少了容错,攻击范围变得更小了,所以这里减0.5 skill_info.Range = Mathf.Max(0f, skill_info.Range); skill_info.MpCost = DBTextResource.ParseI_s(GetReaderString(table_reader, "cost"), 0); skill_info.Target = GetReaderString(table_reader, "target"); skill_info.ForwardSpeed = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "forward_move_speed"), 0) * 0.01f; skill_info.ForwardTime = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "forward_move_time"), 0) * GlobalConst.MilliToSecond; skill_info.MaxSingTime = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "max_sing_time"), 0) * GlobalConst.MilliToSecond; skill_info.CastingSpeed = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "casting_move_speed"), 0) * 0.01f; skill_info.CastingTime = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "casting_move_time"), 0) * GlobalConst.MilliToSecond; skill_info.BulletId = DBTextResource.ParseUI_s(GetReaderString(table_reader, "bullet_id"), 0); skill_info.ParentSkillId = DBTextResource.ParseUI_s(GetReaderString(table_reader, "parent_skill"), 0); skill_info.ChildSkillId = DBTextResource.ParseUI_s(GetReaderString(table_reader, "child_skill"), 0); skill_info.AnimationName = GetReaderString(table_reader, "skill_ani"); skill_info.Sound = GetReaderString(table_reader, "skill_sound"); skill_info.CastingReadyName = GetReaderString(table_reader, "skill_sing_ani"); skill_info.CastingAnimationName = GetReaderString(table_reader, "skill_casting_ani"); skill_info.CastingEndAnimationName = GetReaderString(table_reader, "skill_casting_end_ani"); skill_info.RigidityTime = DBTextResource.ParseUS_s(GetReaderString(table_reader, "rigidity_time"), 0) * GlobalConst.MilliToSecond; skill_info.CacheTime = DBTextResource.ParseUS_s(GetReaderString(table_reader, "cache_time"), 0) * GlobalConst.MilliToSecond; skill_info.SkillAnnounce = GetReaderString(table_reader, "skill_announce"); skill_info.CostFury = DBTextResource.ParseUI_s(GetReaderString(table_reader, "cost_fury"), 0); skill_info.GenFury = DBTextResource.ParseUI_s(GetReaderString(table_reader, "gen_fury"), 0); skill_info.IsFalseHitBack = DBTextResource.ParseUS_s(GetReaderString(table_reader, "isFalseHitBack"), 0) == 1; skill_info.UiEffectIconList = DBTextResource.ParseArrayString(GetReaderString(table_reader, "ui_effect_icon_list"), ",", true); skill_info.UiEffectSoundName = GetReaderString(table_reader, "ui_effect_sound"); string[] ratios = TextHelper.GetTupleFromString(GetReaderString(table_reader, "multi_hit_ratio")); if (ratios != null) { skill_info.MultiHitRatios = new List <float>(); for (int j = 0; j < ratios.Length; ++j) { float ratio = DBTextResource.ParseF(ratios[j]); skill_info.MultiHitRatios.Add(ratio); } } string[] delays = TextHelper.GetTupleFromString(GetReaderString(table_reader, "multi_hit_delay")); if (delays != null) { skill_info.MultiHitDelayTimes = new List <float>(); for (int j = 0; j < delays.Length; ++j) { float delay = DBTextResource.ParseF(delays[j]); skill_info.MultiHitDelayTimes.Add(delay); } } if (skill_info.MultiHitDelayTimes != null && skill_info.MultiHitDelayTimes.Count != skill_info.MultiHitRatios.Count) { string log = string.Format("SkillId: {0} 多段伤害系数与延迟时间不匹配", skill_info.Id); Debug.LogError(log); } string[] effects = TextHelper.GetTupleFromString(GetReaderString(table_reader, "effects")); // 先把table_reader关闭,因为在GetBattleFxInfo和GetSkillEffectInfo中需要获取新的Reader table_reader.Close(); table_reader.Dispose(); // 获取技能特效参数 DBBattleFx.BattleFxInfo battleInfo = DBBattleFx.Instance.GetBattleFxInfo(skill_info.Id); if (battleInfo != null) { skill_info.BattleFxInfo = battleInfo; } else { if (skill_info.IsTrigger == false)// 非触发类型的技能才需要战斗效果信息 { GameDebug.LogError(string.Format("Skill: {0}没有对应的战斗效果信息", skill_info.Id)); } } // 追踪目标类型的子弹(依赖于battleInfo,所以要放在battleInfo数据读取之后) if (skill_info.BulletId != 0 && skill_info.IsTrigger == false) { DBBulletTrace.BulletInfo bulletInfo = DBBulletTrace.GetInstance().GetBulletInfo(skill_info.BulletId); if (bulletInfo != null) { skill_info.BulletTrace = new BulletTrackInstance(bulletInfo, skill_info); } } // 获取技能效果参数 if (effects != null) { for (int j = 0; j < effects.Length; ++j) { uint effectId = DBTextResource.ParseUI(effects[j]); var effect_info = DBSkillEffect.GetInstance().GetSkillEffectInfo(effectId); if (effect_info == null) { string log = string.Format("SkillId: {0} 对应的技能效果Id: {1} 错误", skill_info.Id, effectId); Debug.LogError(log); } else { if (effect_info.type == "charge" || effect_info.type == "teleport")// 冲锋、瞬移技能的移动速度参数放在效果表中配置 { skill_info.CastingSpeed = effect_info.p1 * GlobalConst.UnitScale; if (effect_info.type == "teleport") { skill_info.Invisible = true; } } } } } mSkillInfoMap[skill_info.Id] = skill_info; } return(skill_info); }
/// <summary> /// 读取指定窗口的配置 /// </summary> /// <param name="name"></param> /// <returns></returns> private UIInfo GetUIInfo(string name) { string queryStr = string.Format("SELECT * FROM {0} WHERE {0}.{1}=\"{2}\"", mTableName, "name", name); var reader = DBManager.Instance.ExecuteSqliteQueryToReader(GlobalConfig.DBFile, mTableName, queryStr); if (reader == null) { return(null); } if (!reader.HasRows || !reader.Read()) { reader.Close(); reader.Dispose(); return(null); } UIInfo info = new UIInfo(); info.name = name; info.support_back = DBTextResource.ParseBT_s(GetReaderString(reader, "support_back"), 0) == 1; info.is_modal = DBTextResource.ParseBT_s(GetReaderString(reader, "is_modal"), 0) == 1; info.ui_type = DBTextResource.ParseBT_s(GetReaderString(reader, "ui_type"), 0); info.is_global = DBTextResource.ParseBT_s(GetReaderString(reader, "is_global"), 0) == 1; info.sub_panels = GetReaderString(reader, "sub_panels"); info.init_open_panels = GetReaderString(reader, "init_open_panels"); info.sub_canvas_lenght = DBTextResource.ParseBT_s(GetReaderString(reader, "sub_canvas_lenght"), 0); info.lua_path = GetReaderString(reader, "lua_path"); var delay_time_text = GetReaderString(reader, "destroy_delay_time"); ushort delay_time = 0; if (string.IsNullOrEmpty(delay_time_text)) { if (SystemInfo.systemMemorySize <= 1024) { delay_time = 10; } else { delay_time = 20; } } else { delay_time = DBTextResource.ParseUS_s(delay_time_text, 10); } info.destroy_delay_time = delay_time; info.static_layer_index = DBTextResource.ParseS_s(GetReaderString(reader, "static_layer_index"), -1); info.reconnect_handle = DBTextResource.ParseBT_s(GetReaderString(reader, "reconnect_handle"), 0); info.return_handle = DBTextResource.ParseBT_s(GetReaderString(reader, "return_handle"), 0); info.stay_when_switch_plane_instance = DBTextResource.ParseBT_s(GetReaderString(reader, "stay_when_switch_plane_instance"), 0) == 1; info.close_wins_type_when_show = DBTextResource.ParseBT_s(GetReaderString(reader, "close_wins_type_when_show"), 0); info.ban_back_last_panel = DBTextResource.ParseBT_s(GetReaderString(reader, "ban_back_last_panel"), 0) == 1; info.ban_sub_window_when_back = DBTextResource.ParseBT_s(GetReaderString(reader, "ban_sub_window_when_back"), 0) == 1; info.reopen = DBTextResource.ParseBT_s(GetReaderString(reader, "reopen"), 0) == 1; info.patch_id = DBTextResource.ParseBT_s(GetReaderString(reader, "patch_id"), 0); mData[info.name] = info; reader.Close(); reader.Dispose(); return(info); }