/// <summary> /// 进入帮派红包雨 /// </summary> /// <param name="playJumpOutAnimation"></param> public static void EnterGuildRainRedPacket(bool playJumpOutAnimation = true) { if (SceneHelp.Instance.IsInGuildManor == true) { UINotice.Instance.ShowMessage(DBConstText.GetText("GUILD_ALREADY_IN_GUILD_MANOR")); return; } if (SceneHelp.CheckCanSwitch(GameConst.WAR_TYPE_WILD, GameConst.WAR_SUBTYPE_GUILD_MANOR) == false) { return; } if (PKModeManagerEx.Instance.TryToOtherDungeonScene() == false) { return; } if (playJumpOutAnimation) { JumpToInstance(0, GameConst.WAR_TYPE_WILD, GameConst.WAR_SUBTYPE_GUILD_MANOR, () => { var pack = new C2SMoneyRainStart(); NetClient.GetBaseClient().SendData <C2SMoneyRainStart>(NetMsg.MSG_MONEY_RAIN_START, pack); }); } else { var pack = new C2SMoneyRainStart(); NetClient.GetBaseClient().SendData <C2SMoneyRainStart>(NetMsg.MSG_MONEY_RAIN_START, pack); } }
/// <summary> /// 进入远洋海盗船 /// </summary> /// <param name="type"></param> public static void EnterCorsair(uint type) { if (type == 1) { if (SceneHelp.CheckCanSwitch(GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_CORSAIR) == false) { return; } if (PKModeManagerEx.Instance.TryToOtherDungeonScene() == false) { return; } JumpToInstance(0, GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_CORSAIR, () => { var pack = new C2SDungeonCorsairEnter(); pack.type = type; NetClient.GetBaseClient().SendData <C2SDungeonCorsairEnter>(NetMsg.MSG_DUNGEON_CORSAIR_ENTER, pack); }); } else { var pack = new C2SDungeonCorsairEnter(); pack.type = type; NetClient.GetBaseClient().SendData <C2SDungeonCorsairEnter>(NetMsg.MSG_DUNGEON_CORSAIR_ENTER, pack); } }
/// <summary> /// 传送点 /// </summary> /// <returns></returns> public static List <MiniMapPointInfo> GetInstanceAllTrasnspot(uint instance_id) { List <MiniMapPointInfo> map_point_infos = new List <MiniMapPointInfo>(); var nep_data = xc.Dungeon.LevelManager.Instance.LoadLevelFileTemporary(SceneHelp.GetFirstStageId(instance_id)); if (nep_data == null) { GameDebug.LogError("get nep_data failed,instance id: " + instance_id); return(map_point_infos); } var monstersData = nep_data.GetData <Neptune.Collider>().Data; foreach (var item in monstersData) { if (item.Value is Neptune.Collider) { Neptune.Collider tag = item.Value as Neptune.Collider; if (tag.Comment != null && tag.Comment.CompareTo("transfer") == 0) { MiniMapPointInfo info = new MiniMapPointInfo(); info.Id = tag.Id; info.MapId = instance_id; info.Position = tag.Position; info.PointType = MiniMapPointType.Transfer; map_point_infos.Add(info); } } } return(map_point_infos); }
/// <summary> /// 获得场景中所有npc /// </summary> /// <returns></returns> public static List <MiniMapPointInfo> GetInstanceAllNpc(uint instance_id) { List <MiniMapPointInfo> map_point_infos = new List <MiniMapPointInfo>(); var nep_data = xc.Dungeon.LevelManager.Instance.LoadLevelFileTemporary(SceneHelp.GetFirstStageId(instance_id)); if (nep_data == null) { GameDebug.LogError("get nep_data failed,instance id: " + instance_id); return(map_point_infos); } Dictionary <int, Neptune.BaseGenericNode> monstersData = nep_data.GetData <Neptune.NPC>().Data; foreach (var item in monstersData) { if (item.Value is Neptune.NPC) { Neptune.NPC npc = item.Value as Neptune.NPC; //if (npc.SpawnDirectly) { MiniMapPointInfo info = new MiniMapPointInfo(); info.Id = npc.Id; info.MapId = instance_id; info.ActorId = NpcHelper.GetNpcActorId(npc.ExcelId); info.Name = RoleHelp.GetActorName(info.ActorId); info.BlackName = info.Name; info.Position = npc.Position; info.PointType = MiniMapPointType.Npc; map_point_infos.Add(info); } } } return(map_point_infos); }
/// <summary> /// 点击前往挂机点的按钮 /// </summary> public void OnClickGotoMonster() { // 本地玩家是否处于护送状态 if (SceneHelp.CheckLocalPlayerEscortTaskState() == false) { return; } if (mCurrentMonsterInfo == null) { return; } // 记录当弹出退出提示的时候是否要继续自动战斗 if (SceneHelp.Instance.IsInInstance == true || SceneHelp.Instance.IsCanExitBtnInWild == true) { SceneHelp.Instance.IsAutoFightingWhenShowExitTips = InstanceManager.Instance.IsAutoFighting || SceneHelp.Instance.IsAutoFightingWhenShowExitTips; } // 首先取消自动挂机 InstanceManager.Instance.IsAutoFighting = false; // 世界boss默认刷新到1分线 if (ActorHelper.IsWorldBoss(mCurrentMonsterInfo.ActorId) && !SceneHelp.Instance.IsInFirstWorldBossInstance) { if (SceneHelp.CheckCanSwitch(mCurrentMonsterInfo.MapId, true) == true) { TargetPathManager.Instance.GoToConstPosition(mCurrentMonsterInfo.MapId, 1, mCurrentMonsterInfo.Position, null, () => { InstanceManager.Instance.SetOnHook(true); }); } } else { // 从服务器那里获取挂机位置 uint hangId = DBHang.Instance.GetHangIdByInstanceIdAndTagId(mCurrentMonsterInfo.MapId, (uint)mCurrentMonsterInfo.Id); uint tagIndex = DBHang.Instance.GetTagIndexByInstanceIdAndTagId(mCurrentMonsterInfo.MapId, (uint)mCurrentMonsterInfo.Id); if (hangId > 0) { var data = new C2SMapGetHangPos(); data.data_id = hangId; data.nth_pos = tagIndex; NetClient.GetBaseClient().SendData <C2SMapGetHangPos>(NetMsg.MSG_MAP_GET_HANG_POS, data); } // 如果配置表没有数据则客户端直接跳转 else { if (SceneHelp.CheckCanSwitch(mCurrentMonsterInfo.MapId, true) == true) { TargetPathManager.Instance.GoToConstPosition(mCurrentMonsterInfo.MapId, SceneHelp.Instance.CurLine, mCurrentMonsterInfo.Position, null, () => { InstanceManager.Instance.SetOnHook(true); }); } } } UIManager.Instance.CloseSysWindow("UIMapWindow"); }
private IEnumerator CoLoadNavmeshFile(string path) { SGameEngine.AssetResource result = new SGameEngine.AssetResource(); yield return(MainGame.HeartBehavior.StartCoroutine(SGameEngine.ResourceLoader.Instance.load_asset(path, typeof(TextAsset), result))); // 加载好的数据是否是当前场景的数据 uint stage_id = SceneHelp.GetFirstStageId(SceneHelp.Instance.CurSceneID); uint map_id = SceneHelp.GetMapIdByStageId(stage_id); string navmesh_file = "Assets/Res/NavMesh/" + map_id.ToString() + ".txt"; if (navmesh_file.Equals(path) == false) { yield break; } if (result.asset_ == null) { IsLoadingNavmeshFile = false; yield break; } TextAsset textAsset = result.asset_ as TextAsset; if (textAsset == null || textAsset.text == null) { IsLoadingNavmeshFile = false; Debug.LogError("LevelManager::CoLoadNavmeshFile, can not read navmesh file:" + path); yield break; } bool ret = XNavMesh.LoadBuffer(textAsset.bytes); if (!ret) { mCurNavmeshFile = string.Empty; GameDebug.LogError("navmesh LoadBuffer error : " + path); } else { mCurNavmeshFile = path; } result.destroy(); IsLoadingNavmeshFile = false; }
/// <summary> /// 进入武神塔 /// </summary> public static void EnterKungFuGod() { if (SceneHelp.CheckCanSwitch(GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_SECRET_AREA) == false) { return; } if (PKModeManagerEx.Instance.TryToOtherDungeonScene() == false) { return; } JumpToInstance(0, GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_SECRET_AREA, () => { var pack = new C2SDungeonSecretAreaEnter(); NetClient.GetBaseClient().SendData <C2SDungeonSecretAreaEnter>(NetMsg.MSG_DUNGEON_SECRET_AREA_ENTER, pack); }); }
/// <summary> /// 进入剑域盛会 /// </summary> public static void EnterWorshipMeeting() { if (SceneHelp.CheckCanSwitch(GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_WORSHIP_MEETING) == false) { return; } if (PKModeManagerEx.Instance.TryToOtherDungeonScene() == false) { return; } JumpToInstance(0, GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_WORSHIP_MEETING, () => { var pack = new C2SDungeonWorshipMeetingEnter(); NetClient.GetBaseClient().SendData <C2SDungeonWorshipMeetingEnter>(NetMsg.MSG_DUNGEON_WORSHIP_MEETING_ENTER, pack); }); }
/// <summary> /// 加载关卡配置 /// </summary> /// <param name="id"></param> public void LoadLevelFile(uint stage_id, bool async) { string path = Id2Path(stage_id); LoadLevelFile(path, async); //Debug.LogError("test navmesh ........."); uint map_id = SceneHelp.GetMapIdByStageId(stage_id); string navmesh_file = "Assets/Res/NavMesh/" + map_id.ToString() + ".txt"; if (mCurNavmeshFile.Equals(navmesh_file) == false) { IsLoadingNavmeshFile = true; MainGame.HeartBehavior.StartCoroutine(CoLoadNavmeshFile(navmesh_file)); } }
/// <summary> /// 进入帮派联赛 /// </summary> public static void EnterGuildLeague() { if (SceneHelp.Instance.IsInGuildLeagueInstance() == true) { UINotice.Instance.ShowMessage(DBConstText.GetText("GUILD_ALREADY_IN_GUILD_LEAGUE")); return; } if (SceneHelp.CheckCanSwitch(GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_GUILD_LEAGUE) == false) { return; } JumpToInstance(0, GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_GUILD_LEAGUE, () => { var pack = new C2SGuildLeagueEnter(); NetClient.GetBaseClient().SendData <C2SGuildLeagueEnter>(NetMsg.MSG_GUILD_LEAGUE_ENTER, pack); }); }
/// <summary> /// 进入婚宴副本 /// </summary> public static void EnterWeddingInstance() { if (SceneHelp.Instance.IsInWeddingInstance == true) { UINotice.Instance.ShowMessage(DBConstText.GetText("INSTANCE_ALREADY_IN_IT")); return; } if (SceneHelp.CheckCanSwitch(GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_WEDDING) == false) { return; } JumpToInstance(0, GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_WEDDING, () => { var pack = new C2SDungeonWeddingEnter(); NetClient.GetBaseClient().SendData <C2SDungeonWeddingEnter>(NetMsg.MSG_DUNGEON_WEDDING_ENTER, pack); }); }
/// <summary> /// 进入破碎死域 /// </summary> public static void EnterDeadSpace() { if (SceneHelp.Instance.IsInDeadSpaceInstance == true) { xc.UINotice.Instance.ShowMessage(DBConstText.GetText("INSTANCE_ALREADY_IN_IT")); return; } if (SceneHelp.CheckCanSwitch(GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_DEAD_SPACE) == false) { return; } if (PKModeManagerEx.Instance.TryToOtherDungeonScene() == false) { return; } JumpToInstance(0, GameConst.WAR_TYPE_DUNGEON, GameConst.WAR_SUBTYPE_DEAD_SPACE, () => { var pack = new C2SDungeonDeadSpaceEnter(); NetClient.GetBaseClient().SendData <C2SDungeonDeadSpaceEnter>(NetMsg.MSG_DUNGEON_DEAD_SPACE_ENTER, pack); }); }
public void OnClickMap(uint mapId) { uint needLevel = InstanceHelper.GetInstanceNeedRoleLevel((uint)mapId); var instance = DBInstance.Instance.GetInstanceInfo(mapId); string peakLvDesc = GetPeakLvDesc(needLevel); var preStrFmt = DBConstText.GetText("GAME_MAP_OPEN_TIPS"); // 达到{0} string descontent = string.Format(preStrFmt, peakLvDesc); uint isCanEnterCount = 0; if (needLevel > LocalPlayerManager.Instance.Level) { isCanEnterCount++; descontent = string.Format("<color=#ff0000>{0}</color>", descontent); } var needTaskId = instance.mNeedTaskId; if (instance != null && needTaskId != 0) { int requestLevelMin = TaskDefine.GetTaskRequestLevelMin(needTaskId); string taskFmt = DBConstText.GetText("GAME_MAP_FINISH_TASK_TIPS"); //完成{0}任务开启 string requestPeakLvDesc = GetPeakLvDesc((uint)requestLevelMin); string taskDesc = string.Format(taskFmt, requestPeakLvDesc); if (TaskHelper.MainTaskIsPassed(needTaskId) == false) { taskDesc = string.Format("<color=#ff0000>{0}</color>", taskDesc); isCanEnterCount++; } descontent += string.Format("\n{0}", taskDesc); } if (isCanEnterCount == 0) { if (mapId == SceneHelp.Instance.CurSceneID) { if (instance != null) { UINotice.Instance.ShowMessage(string.Format(DBConstText.GetText("ENTER_SAME_SCENE_TIPS"), instance.mName)); } else { UINotice.Instance.ShowMessage(DBConstText.GetText("INSTANCE_CAN_NOT_SWITCH_WILD_INSTANCE")); } } else { SceneHelp.JumpToScene(mapId); UIManager.Instance.CloseSysWindow("UIWorldMapWindow"); } } else { var refObjPos = GetMapPointRefObjPos(mMapGoDic[(int)mapId]); mNotEnterTips.transform.localPosition = new Vector3(refObjPos.x, refObjPos.y - 190, 0); mNotEnterTips.SetActive(true); mNotEnterTipsTrigger.gameObject.SetActive(true); mNotEnterTipsTrigger.transform.SetAsLastSibling(); Text content = UIHelper.FindChild(mNotEnterTips, "Content").GetComponent <Text>(); content.text = descontent; } }
/// <summary> /// 获取指定副本中标记的普通刷怪点和特殊怪物点 /// </summary> /// <returns></returns> public static List <MiniMapPointInfo> GetInstanceAllNormalMonster(uint instance_id) { List <MiniMapPointInfo> map_point_infos = new List <MiniMapPointInfo>(); var nep_data = xc.Dungeon.LevelManager.Instance.LoadLevelFileTemporary(SceneHelp.GetFirstStageId(instance_id)); if (nep_data == null) { GameDebug.LogError("get nep_data failed,instance id: " + instance_id); return(map_point_infos); } Dictionary <int, Neptune.BaseGenericNode> all_node_data = nep_data.GetData <Neptune.Tag>().Data; // 获取关卡中所有标记为Tag的物体数据 var special_monster_info = DBManager.Instance.GetDB <DBSpecialMon>().GetDungeonData(instance_id); // 获取当前副本中特殊怪物的数据(世界boss,盗宝怪) foreach (var item in all_node_data) { Neptune.Tag tag = item.Value as Neptune.Tag; if (tag == null || tag.Type == null) { continue; } if (tag.Type.CompareTo("map_mon_pos") == 0)// Tag 为怪物标识点 { MiniMapPointInfo info = new MiniMapPointInfo(); info.Id = tag.Id; info.Tag = tag.Id; info.Position = tag.Position; info.MapId = instance_id; string key = string.Format("{0}_{1}", tag.Id, instance_id);// 唯一id由{tag_id}_{map_id}组成 var data_actor_tag = DBManager.Instance.QuerySqliteRow <string>(GlobalConfig.DBFile, "data_actor_tag", "csv_id", key); //服务端不建议改表格式 //List<Dictionary<string, string>> data_actor_tag = null; //string key = string.Empty; //SDKConfig sdk_config = SDKHelper.GetSDKConfig(); //if (sdk_config != null && SDKHelper.IsCopyBag() && AuditManager.Instance.Open) //{ // key = string.Format("{0}_{1}{2}", tag.Id, instance_id, sdk_config.SDKNamePrefix); // data_actor_tag = DBManager.Instance.QuerySqliteRow<string>(GlobalConfig.DBFile, "data_actor_tag", "csv_id", key); //} ////当对应的马甲包没配置对应的数据时,就直接用正式数据 //if (data_actor_tag == null || data_actor_tag.Count == 0) //{ // key = string.Format("{0}_{1}", tag.Id, instance_id);// 唯一id由{tag_id}_{map_id}组成 // data_actor_tag = DBManager.Instance.QuerySqliteRow<string>(GlobalConfig.DBFile, "data_actor_tag", "csv_id", key); //} if (data_actor_tag.Count > 0) { var table = data_actor_tag[0]; info.ActorId = DBTextResource.ParseUI(table["actor_id"]); info.ListNeedShow = DBTextResource.ParseUI(table["need_show"]) == 1 ? true : false; if (ActorHelper.IsEliteMonster(info.ActorId))// 判断怪物是否是精英怪 { info.PointType = MiniMapPointType.EliteMonster; } else { info.PointType = MiniMapPointType.Monster; } info.Name = ActorHelper.GetColorNameDiff(info.ActorId, 0); info.BlackName = ActorHelper.GetColorNameDiff(info.ActorId, 1); info.Level = ActorHelper.GetActorLevel(info.ActorId); map_point_infos.Add(info); } } else if (tag.Type.CompareTo("boss_pos") == 0 && special_monster_info != null) { //boss读表 string tagGroup = "boss_pos_" + tag.Id; DBSpecialMon.DBSpecialMonItem boss = special_monster_info.Find(delegate(DBSpecialMon.DBSpecialMonItem specialMon) { return(specialMon.TagGroup.CompareTo(tagGroup) == 0); }); if (boss != null) { MiniMapPointInfo info = new MiniMapPointInfo(); info.Id = (int)boss.Id; info.Tag = tag.Id; info.Position = tag.Position; info.MapId = instance_id; info.ActorId = boss.ActorId; info.Name = ActorHelper.GetColorNameDiff(info.ActorId, 0); info.BlackName = ActorHelper.GetColorNameDiff(info.ActorId, 1); info.Level = ActorHelper.GetActorLevel(info.ActorId); info.PointType = MiniMapPointType.Boss; map_point_infos.Add(info); } } } return(map_point_infos); }