/// <summary> /// 战斗AI行为,如果攻击范围内有怪物则进行攻击 /// </summary> private void AiAttackBehaviour() { SysMapVo vo = BaseDataMgr.instance.GetMapVo(AppMap.Instance.mapParser.MapId); //副本里面的玩家的自动攻击 if (vo.type == MapTypeConst.COPY_MAP) { IEnumerable <ActionDisplay> enemyList = GetEnemyDisplay(); foreach (ActionDisplay display in enemyList) { var baseRoleVo = display.GetVo() as BaseRoleVo; if (baseRoleVo != null && baseRoleVo.CurHp <= 0) { continue; } if (display.Controller == null) { continue; } if (Mathf.Abs(display.Controller.transform.position.x - MeController.transform.position.x) <= 1.4 && Mathf.Abs(display.Controller.transform.position.y - MeController.transform.position.y) <= 0.4) { var attackVo = new ActionVo { ActionType = Actions.ATTACK, TargetPoint = display.GoBase.transform.position }; StartCoroutine(YieldSecordsAutoAttack(0.5f, attackVo)); break; } } } }
/**加载地图 * @param MapId 加载地图ID * @param mapUrl 地图资源地址 * **/ public void LoadMap(uint mapId) { Log.info(this, "-loadMap()设置MapParser里的isChange为true并更新mapId"); IsChange = true; MapId = mapId; Log.info(this, "-loadMap()停止地图渲染"); _map.stopRender(); Log.info(this, "-loadMap()销毁场景中所有物体"); _map.dispose(); SysMapVo mapVo = BaseDataMgr.instance.GetMapVo(mapId); var resourceId = (uint)mapVo.resource_id; if (Application.platform == RuntimePlatform.WindowsEditor && AppNet.main.TestSceneId != 0) { resourceId = (uint)AppNet.main.TestSceneId; //给测试场景用 } Singleton <StartLoadingView> .Instance.loaderList.Clear(); Singleton <StartLoadingView> .Instance.loaderList.Add( AssetManager.Instance.LoadSceneLevel(resourceId, LoadSceneCallBack)); if (Singleton <MapMode> .Instance.IsFirstInToScene) { //第一次开始加载场景时执行的预加载: AddFirstSceneLoad(); } }
/**向上|向下寻找以startMapId为起点,targetMapId为目标点的场景链 * @param startMapId 起点场景ID * @param targetMapId 目标点场景ID * @param isUp 寻找方向[true:向上寻找,false:向下寻找] * @return 场景链 * **/ private void findMapLinks(string startMapId, string targetMapId, bool isUp) { tempMapList.Clear(); bool result = false; SysMapVo mapVo = BaseDataMgr.instance.GetMapVo(uint.Parse(startMapId)); while (true) { //mapVo = BaseDataMgr.instance.GetMapVo(isUp ? mapVo.preId : mapVo.nextId); tempMapList.Add(mapVo.id.ToString()); if (mapVo.id.Equals(targetMapId)) {//找到 result = true; break; } if (mapVo.type == MapTypeConst.CITY_MAP) { break; //没找到,退出 } } if (!result) { tempMapList.Clear(); } }
private MonsterVo MonsterAdapt(MonsterVo enemyVo) { SysMapVo mapVo = BaseDataMgr.instance.GetMapVo(MeVo.instance.mapId); if (mapVo.adapt) { enemyVo.Level = MeVo.instance.Level; #if false float zoomFactor = 10000f; SysMonsterAdaptRuleVo adapt = BaseDataMgr.instance.GetMonsterAdapt((uint)MeVo.instance.Level); enemyVo.Level = MeVo.instance.Level; enemyVo.CurHp = (uint)(enemyVo.CurHp * adapt.hp_ratio / zoomFactor); enemyVo.Hp = (uint)(enemyVo.Hp * adapt.hp_ratio / zoomFactor); enemyVo.AttMMax = (uint)(enemyVo.AttMMax * adapt.att_m_max_ratio / zoomFactor); enemyVo.AttMMin = (uint)(enemyVo.AttMMin * adapt.att_m_min_ratio / zoomFactor); enemyVo.AttPMin = (uint)(enemyVo.AttPMin * adapt.att_p_min_ratio / zoomFactor); enemyVo.AttPMax = (uint)(enemyVo.AttPMax * adapt.att_p_max_ratio / zoomFactor); enemyVo.DefM = (uint)(enemyVo.DefM * adapt.def_m_ratio / zoomFactor); enemyVo.DefP = (uint)(enemyVo.DefP * adapt.def_p_ratio / zoomFactor); enemyVo.Hit = (uint)(enemyVo.Hit * adapt.hit_ratio / zoomFactor); enemyVo.Dodge = (int)(enemyVo.Dodge * adapt.dodge_ratio / zoomFactor); enemyVo.Crit = (uint)(enemyVo.Crit * adapt.crit_lvl_ratio / zoomFactor); enemyVo.CritRatio = (uint)(enemyVo.CritRatio * adapt.crit_hurt_ratio / zoomFactor); enemyVo.Flex = (uint)(enemyVo.Flex * adapt.flex_ratio / zoomFactor); enemyVo.HurtRe = (uint)(enemyVo.HurtRe * adapt.hurt_re_ratio / zoomFactor); #endif } return(enemyVo); }
/// <summary> /// 加载场景 /// </summary> /// <param name="mapResourceId">场景ID</param> /// <param name="callBack">场景加载完成回调</param> /// <returns>场景加载对象</returns> public AssetBundleLoader LoadSceneLevel(uint mapResourceId, LoadAssetFinish <GameObject> callBack) { string sceneFileName = "Scene/" + mapResourceId + ".assetbundle"; string sceneName = mapResourceId.ToString(); if (!loadAssetbundle) { AssetBundleLoader s = new AssetBundleLoader("", "", typeof(GameObject)); StartCoroutine(LoadSceneInResource(mapResourceId, callBack)); return(s); } int[] subTypeList = { PRTypeConst.ST_SKILL, PRTypeConst.ST_SOUND }; for (int i = 0; i < subTypeList.Length; i++) { IList <SysReadyLoadVo> preloadList = BaseDataMgr.instance.GetScenePreLoadList(mapResourceId, subTypeList[i]); Singleton <StartLoadingView> .Instance.PreLoadNum += preloadList.Count; } SysMapVo mapVo = BaseDataMgr.instance.GetMapVo(MeVo.instance.mapId); //获取要加载的怪物队列,并计算预加载数 if (mapVo.type == MapTypeConst.COPY_MAP) { MonsterMgr.Instance.PreMonloadList = BaseDataMgr.instance.GetMonPreLoadList(MeVo.instance.mapId); if (MonsterMgr.Instance.PreMonloadList.Count > 0) { Singleton <StartLoadingView> .Instance.PreLoadNum += MonsterMgr.Instance.PreMonloadList.Count; } } return(LoadSceneLevel(sceneFileName, sceneName, callBack)); }
/// <summary> /// 根据不同的地图类型设置玩家不同的待机状态 /// </summary> private void SetHeroIdleType() { SysMapVo mapVo = AppMap.Instance.mapParser.MapVo; switch (mapVo.type) { case MapTypeConst.CITY_MAP: AppMap.Instance.me.Animator.SetFloat(Status.IDLE_TYPE, Status.NORMAL_IDLE); break; case MapTypeConst.COPY_MAP: AppMap.Instance.me.Animator.SetFloat(Status.IDLE_TYPE, Status.BATTLE_IDLE); break; } }
// 根据副本ID,打开对应的副本界面 public void OpenCopyById(uint copyId) { SysMapVo map = BaseDataMgr.instance.GetMapVo(copyId); switch (map.subtype) { case 1: OpenMainCopyById(copyId); break; case 7: OpenDaemonCopyById(copyId); break; default: break; } }
/// <summary> /// 创建传送点 /// </summary> /// <param name="mapId"></param> private void CreateMapPoint(string mapId) { if (Convert.ToInt32(mapId) > 10000 && Convert.ToInt32(mapId) < 20000) { SysMapVo map = BaseDataMgr.instance.GetMapVo(uint.Parse(mapId)); string[] worldTransPos = StringUtils.GetValueListFromString(map.world_trans_pos); AppMap.Instance.mapParser.WorldTransPosX = float.Parse(worldTransPos[0]) * GameConst.PositionUnit; AppMap.Instance.mapParser.WorldTransPosY = float.Parse(worldTransPos[1]) * GameConst.PositionUnit; string[] TransPos = StringUtils.GetValueListFromString(map.trans_pos); AppMap.Instance.mapParser.TransPosX = float.Parse(TransPos[0]) * GameConst.PositionUnit; AppMap.Instance.mapParser.TransPosY = float.Parse(TransPos[1]) * GameConst.PositionUnit; //创建副本传送点 var vo = new DisplayVo { X = AppMap.Instance.mapParser.TransPosX, Y = AppMap.Instance.mapParser.TransPosY, ClothUrl = "Model/Teleport/Empty.assetbundle", ModelLoadCallBack = LoadMapPointCallBack }; BaseDisplay display = AppMap.Instance.CreateMapPoint(vo); var mapPointDisplay = display as MapPointDisplay; if (mapPointDisplay != null) { mapPointDisplay.jumpMapId = 20001; } //创建世界传送点 var voWorld = new DisplayVo { X = AppMap.Instance.mapParser.WorldTransPosX, Y = AppMap.Instance.mapParser.WorldTransPosY, ClothUrl = "Model/Teleport/Empty.assetbundle", ModelLoadCallBack = LoadMapPointCallBack }; BaseDisplay displayWorld = AppMap.Instance.CreateWorldMapPoint(voWorld); var mapPointDisplayWorld = displayWorld as MapPointDisplay; if (mapPointDisplayWorld != null) { mapPointDisplayWorld.jumpMapId = 20001; } } }
void Start() { print("****StoryCameraMove 这个脚本有执行吗?"); selfTransform = gameObject.transform; cameraPos = selfTransform.position; TargetPos.y = cameraPos.y; TargetPos.z = cameraPos.z; mapFarBg1 = AppMap.Instance.mapParser.FarLayer1; if (null != mapFarBg1) { mapFarBg1Pos = mapFarBg1.transform.position; } cameraGapLen = (float)Screen.width / Screen.height * Camera.main.orthographicSize; SysMapVo vo = BaseDataMgr.instance.GetMapVo(AppMap.Instance.mapParser.MapId); //副本地图摄像机范围为三个阶段 if (vo.subtype == MapTypeConst.MAIN_COPY || vo.subtype == MapTypeConst.DAEMONISLAND_COPY || vo.subtype == MapTypeConst.FIRST_BATTLE_COPY) { int count = AppMap.Instance.mapParser.AccumulatedStagesLength.Count; borderMin = cameraGapLen; borderMax = AppMap.Instance.mapParser.AccumulatedStagesLength[count - 1] - cameraGapLen; } else { borderMin = AppMap.Instance.mapParser.PosX + cameraGapLen; borderMax = AppMap.Instance.mapParser.EachStageLength[MapMode.CUR_MAP_PHASE - 1] + AppMap.Instance.mapParser.PosX - cameraGapLen; } if (MoveSpeed <= 0f) { MoveSpeed = 10f; } }
//根据副本点返回该副本是否已开启 public bool IsCopyOpened(uint copyId) { bool isOpened; SysMapVo map = BaseDataMgr.instance.GetMapVo(copyId); switch (map.subtype) { case 1: isOpened = Singleton <CopyPointMode> .Instance.IsMainCopyOpend(copyId); break; case 7: isOpened = Singleton <DaemonIslandMode> .Instance.IsDaemonCopyOpened(copyId); break; default: isOpened = false; break; } return(isOpened); }
public bool CheckCanUseTalentSkill() { switch (_talentSkillVo.key) { case TalentSkillType.AddMasterHp: if (_masterVo.CurHp < _masterVo.Hp / 2 && _masterVo.CurHp > 0 && MeController.SkillController.LeftCdTimes[0] <= 0) { return(true); } break; case TalentSkillType.MakeMasterUnbeatable: SysMapVo mapVo = AppMap.Instance.mapParser.MapVo; if (_masterVo.CurHp < _masterVo.Hp * 0.3f && _masterVo.CurHp > 0 && MeController.SkillController.LeftCdTimes[0] <= 0 && mapVo.type == MapTypeConst.COPY_MAP) { return(true); } break; } return(false); }
public static void SetFBInfo(List <GameObject> fbList, int[] fbs) { UILabel fbtips = NGUITools.FindInChild <UILabel>(fbList[1].transform.parent.gameObject, "tips"); if (fbs == null || fbs.Length == 0) { fbList[0].SetActive(false); fbList[1].SetActive(false); fbList[2].SetActive(false); if (fbtips != null) { fbtips.text = "该物品暂不由关卡掉落。"; fbtips.gameObject.SetActive(true); } return; } if (fbtips != null) { fbtips.gameObject.SetActive(false); } //当副本产出点多于3个时,最多显示一个未开启 if (fbs.Length > 3) { } for (int i = 0; i < fbList.Count; i++) { if (i < fbs.Length) { //副本设置的问题 fbList[i].SetActive(true); fbList[i].name = fbs[i].ToString(); SysMapVo mapVo = BaseDataMgr.instance.GetDataById <SysMapVo>((uint)fbs[i]); if (mapVo.subtype == 7) { SysDaemonislandVo treeVo = BaseDataMgr.instance.GetDataById <SysDaemonislandVo>((uint)fbs[i]); treeVo = BaseDataMgr.instance.GetDataById <SysDaemonislandVo>((uint)treeVo.parentId); NGUITools.FindInChild <UILabel>(fbList[i], "num").text = treeVo.name; NGUITools.FindInChild <UISprite>(fbList[i], "fbicn").spriteName = "island"; } else { SysDungeonTreeVo treeVo = BaseDataMgr.instance.GetDataById <SysDungeonTreeVo>((uint)fbs[i]); treeVo = BaseDataMgr.instance.GetDataById <SysDungeonTreeVo>((uint)treeVo.parentId); treeVo = BaseDataMgr.instance.GetDataById <SysDungeonTreeVo>((uint)treeVo.parentId); NGUITools.FindInChild <UILabel>(fbList[i], "num").text = treeVo.name; NGUITools.FindInChild <UISprite>(fbList[i], "fbicn").spriteName = treeVo.icon; } NGUITools.FindInChild <UILabel>(fbList[i], "name").text = mapVo.name; UILabel tips = NGUITools.FindInChild <UILabel>(fbList[i], "tips"); if (!Singleton <CopyControl> .Instance.IsCopyOpened((uint)fbs[i])) { tips.text = "(未开启)"; tips.color = ColorConst.FONT_RED; tips.transform.gameObject.SetActive(true); } else { //显示次数 if (mapVo.subtype == 7) { DaemonCopyVo copy = Singleton <DaemonIslandMode> .Instance.GetDaemonCopyInfo((uint)fbs[i]); tips.text = "(" + copy.usedTimes + "/" + BaseDataMgr.instance.GetMapVo((uint)fbs[i]).enter_count + ")"; tips.color = ColorConst.FONT_YELLOW; tips.transform.gameObject.SetActive(true); } else { tips.transform.gameObject.SetActive(false); } } } else { fbList[i].SetActive(false); } } }
//切换场景完成 private void ChangeSceneOk() { uint mapId = MeVo.instance.mapId; CreateMapPoint(mapId.ToString(CultureInfo.InvariantCulture)); PlayerMgr.instance.start(); MonsterMgr.Instance.start(); PetMgr.Instance.Start(); if (!Singleton <MapMode> .Instance.IsFirstInToScene) { MeVo.instance.PetId = MeVo.instance.PetId; } SysMapVo mapVo = BaseDataMgr.instance.GetMapVo(mapId); switch (mapVo.type) { //进入城镇场景 case MapTypeConst.CITY_MAP: Singleton <BattleView> .Instance.CloseView(); Singleton <BossView> .Instance.CloseView(); Singleton <MainView> .Instance.OpenView(); Singleton <GoGoView> .Instance.CloseView(); AppMap.Instance.me.Controller.ContCutMgr.StopAll(); ViewTree.city.SetActive(true); ViewTree.battle.SetActive(false); if (Singleton <BossMode> .Instance.IsOpenRank) //从世界Boss出来显示奖励信息 { Singleton <BossTips> .Instance.OpenPMView(); Singleton <BossMode> .Instance.IsOpenRank = false; } break; //进入副本场景 case MapTypeConst.COPY_MAP: ViewTree.city.SetActive(false); ViewTree.battle.SetActive(true); Singleton <BattleView> .Instance.OpenView(); Singleton <MainView> .Instance.CloseView(); //主线副本/恶魔岛副本 if (mapVo.subtype == MapTypeConst.MAIN_COPY || mapVo.subtype == MapTypeConst.DAEMONISLAND_COPY || mapVo.subtype == MapTypeConst.FIRST_BATTLE_COPY) { CanPlayHeroHpChangeStory = true; CanPlayMonsterHpChangeStory = true; //播放进入副本语音 SpeechMgr.Instance.PlayEnterCopySpeech(); if (CanPlayCopyStory(mapId)) { if (Singleton <StoryControl> .Instance.PlayEnterSceneStory(mapId, StartBattle)) { enterSceneStoryPlaying = true; PreSortStoryPlay(); } else { StartBattle(); } } else { StartBattle(); } } else { RefreshMonster(); } break; case MapTypeConst.SPECIAL_MAP: ViewTree.city.SetActive(false); ViewTree.battle.SetActive(true); Singleton <BattleView> .Instance.OpenView(); Singleton <MainView> .Instance.CloseView(); RefreshMonster(); break; } //进入地图是英雄榜 if (mapId == MapTypeConst.ARENA_MAP) { CreateChallenger(); //Singleton<ArenaFightView>.Instance.OpenView (); } //进入地图是金银岛 else if (mapId == MapTypeConst.GoldSilverIsland_MAP) { CreateRobberPlayer(); //Singleton<ArenaFightView>.Instance.OpenView (); } //进入地图是世界boss else if (mapId == MapTypeConst.WORLD_BOSS) { Singleton <MainView> .Instance.CloseView(); Singleton <BossView> .Instance.OpenView(); Singleton <BattleView> .Instance.OpenView(); } Singleton <MapMode> .Instance.IsFirstInToScene = false; Singleton <StartLoadingView> .Instance.CloseView(); Debug.Log("**************begin to call Fun_4_7 ();"); Fun_4_7(null); // grsyh }
/**场景信息请求返回**/ public void Fun_4_2(INetData data) { Log.debug(this, "-Fun_4_2 场景信息请求返回成功 "); if (Singleton <MapMode> .Instance.IsFirstInToScene) { AppFacde.instance.InitAfterIntoScene(); //执行第一次进入场景的初始化工作 } var mapSightMsg = new MapSightMsg_4_2(); //mapSightMsg.read(data.GetMemoryStream()); uint mapId = DangJiTester.copyId; //mapSightMsg.mapId; grsyh Log.info(this, "-Fun_4_2() 本角色:" + MeVo.instance.Id + " 切换场景,从:" + AppMap.Instance.mapParser.MapId + "到:" + mapId); Log.info(this, "-Fun_4_2() 更新玩家位置信息"); MeVo.instance.preMapId = AppMap.Instance.mapParser.MapId; if (mapId == MapTypeConst.ARENA_MAP || mapId == MapTypeConst.GoldSilverIsland_MAP) { MeVo.instance.X = 2.5f; } else { MeVo.instance.X = MeVo.instance.toX; } MeVo.instance.mapId = mapId; //mapSightMsg.mapId; grsyh Log.info(this, "-Fun_4_2() 开始切换地图"); MapMode.CUR_MAP_PHASE = mapSightMsg.phase == 0 ? (ushort)1 : mapSightMsg.phase; //不管成败,结束挂机 if (AppMap.Instance.me != null) { var meAiController = AppMap.Instance.me.Controller.AiController as MeAiController; if (meAiController != null && meAiController.IsAi) { meAiController.SetAi(false); Singleton <BattleMode> .Instance.IsAutoSystem = false; } } //View 处理 SysMapVo mapVo = BaseDataMgr.instance.GetMapVo(mapId); switch (mapVo.type) { //进入城镇场景 case MapTypeConst.CITY_MAP: ViewTree.battle.SetActive(false); break; case MapTypeConst.COPY_MAP: ViewTree.city.SetActive(false); break; case MapTypeConst.SPECIAL_MAP: ViewTree.city.SetActive(false); break; } LoadMap(mapId); //根据场景信息生成对应的玩家信息 Log.info(this, "-Fun_4_2()进入场景玩家数量 : " + mapSightMsg.rolesEnter.Count + " 此时主角的mapId: " + MeVo.instance.mapId); Singleton <MapMode> .Instance.AddPlayerInMap(mapSightMsg.rolesEnter); Log.info(this, "-Fun_4_2()进入场景怪物数量 : " + mapSightMsg.monsEnter.Count + " 此时主角的mapId: " + MeVo.instance.mapId); if (mapSightMsg.monsEnter.Count > 0) { AddMonList(mapSightMsg.monsEnter); } }
/**获取摄像机移动的目标位置**/ private void GetTargetPos() // call by Move() by Update() { //设置目标位置和边界范围 if (_meTransform == null) { return; } _targetX = _meTransform.position.x; // 摄像机 X 跟随 主角X轴 _targetY = MainCameraSize; _targetZ = transform.position.z; /*] * if (Application.loadedLevelName == "20003") // 三维场景 * { * _targetY += _testPosY; * _targetZ = (_testPosZ == -1f ? transform.position.z : _testPosZ); * if (_testFieldOfView != -1f) * MainCamera.fieldOfView = _testFieldOfView; * } */ _borderMax = AppMap.Instance.mapParser.EachStageLength[MapMode.CUR_MAP_PHASE - 1] + AppMap.Instance.mapParser.PosX - _offset.x; // _offset.x 差不多 半屏吧 //自动移动到下一阶段地图时时的相应处理 if (MapMode.AutoChangeMap && !MapMode.InStageEndStory) { if (transform.position.x >= AppMap.Instance.mapParser.PosX - _offset.x + 0.1f) //在玩家移动到距离本地图阶段只剩下'半个摄像机长度'时,摄像机开始加速----modify by lixi { //在玩家视野中出现第二阶段地图时摄像机速度和修改摄像机的移动范围(每次切换地图阶段只更新一次) if (_changeMapPhaseSpeedOffset <= 1.1f) { InitMap(); // set -> _borderMin = AppMap.Instance.mapParser.PosX + _offset.x; _changeMapPhaseSpeedOffset = (_borderMin - transform.position.x) / (AppMap.Instance.mapParser.PosX + Global.HERO_WEIGHT - transform.position.x); Log.info(this, "-check()更新摄像机最小边界和移动速度偏移量: " + _changeMapPhaseSpeedOffset); } if (transform.position.x >= AppMap.Instance.mapParser.PosX + _offset.x - 0.1f) { Log.info(this, "-check()自动移动结束,更新战斗UI阶段信息"); Singleton <BattleMode> .Instance.StageInfo = MapMode.CUR_MAP_PHASE + "/" + AppMap.Instance.mapParser.AccumulatedStagesLength .Count; MapMode.AutoChangeMap = false; MapMode.DisableInput = false; MapMode.CanGoToNextPhase = false; MapMode.WaitRefreshMonster = false; Singleton <GoGoView> .Instance.CloseView(); _changeMapPhaseSpeedOffset = 1; Singleton <MapControl> .Instance.PlayStartStageStory(); // Singleton<MapMode>.Instance.EnterNewPhase ((byte)MapMode.CUR_MAP_PHASE); Singleton <MapControl> .Instance.RefreshMonster(); } } } uint mapId = AppMap.Instance.mapParser.MapId; SysMapVo mapVo = BaseDataMgr.instance.GetMapVo(mapId); if (mapVo.type != MapTypeConst.CITY_MAP) { //Log.debug(this, "我移动的坐标点X:" + _meTransform.position.x + " 我移动的坐标点Y:" + _meTransform.position.y + " 我移动的坐标点Z:" + _meTransform.position.z); //bool isTrigger = AppMap.Instance.isTrigger(_meTransform.position.x, _meTransform.position.y, _meTransform.position.z); bool isTrigger = AppMap.Instance.isTrigger(7f, 2f, 1f); if (isTrigger == true && MapMode.CanGoToNextPhase == false && MapMode.IsTriggered == false) { Log.debug(this, "天啊,我触发了一堆怪物,要死了要死了"); Singleton <CopyMode> .Instance.TriggerMonList(); MapMode.IsTriggered = true; } } //边界检测 if (_targetX < _borderMin) { _targetX = _borderMin; } if (_targetX > _borderMax) { _targetX = _borderMax; } //设置摄像机移动的目标位置 _target.x = _targetX; _target.y = _targetY; _target.z = _targetZ; }