public static float GetSkillReleaseDistance(SkillRecord data) { //SkillTargetType type = (SkillTargetType)data.TargetType; var type = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType); switch (type) { case SkillTargetType.SELF: return(0); case SkillTargetType.SINGLE: { return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1)); //return data.TargetParam[0]; } case SkillTargetType.CIRCLE: //return data.TargetParam[0]; { return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1)); } case SkillTargetType.SECTOR: //return data.TargetParam[0]; { return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1)); } case SkillTargetType.RECT: //return data.TargetParam[1]; { return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam2)); } case SkillTargetType.TARGET_CIRCLE: //return data.TargetParam[1]; { return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam2)); } case SkillTargetType.TARGET_RECT: //return data.TargetParam[2]; { return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam3)); } case SkillTargetType.TARGET_SECTOR: //return data.TargetParam[2]; { return(ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam3)); } default: { Logger.Warn("(SkillTargetType)[{0}] not Find ", type); return(0); } } }
public static void RefreshSkillData(this SkillItemDataModel item) { var tbSkill = Table.GetSkill(item.SkillId); item.ChargeLayerTotal = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.Layer); item.ChargeLayer = item.ChargeLayerTotal; item.CoolDownTimeTotal = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.Cd) / 1000.0f; item.ControlType = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.ControlType); item.MaxTargetCount = ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.TargetCount); }
private void OnSkillReleaseNetBack(IEvent ievent) { var e = ievent as SkillReleaseNetBack; var skillId = e.SkillId; var tbSkill = Table.GetSkill(skillId); if (e.IsOk) { mLastSkillTime = Time.time; var skillCd = tbSkill.NoMove; mYindaoCharacter = null; if (tbSkill.CastType == 2) { if (tbSkill.CastParam[0] > skillCd) { skillCd = tbSkill.CastParam[0]; //只有极光才有的效果 var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.TargetType); //if (tbSkill.TargetType == 4) if (targetType == SkillTargetType.RECT) { if (GameControl.Instance != null && GameControl.Instance.TargetObj != null) { mYindaoCharacter = GameControl.Instance.TargetObj; } } } } mCommondCdTime = Game.Instance.ServerTime.AddMilliseconds(tbSkill.CommonCd); SetNextLoopTime(Game.Instance.ServerTime.AddMilliseconds(skillCd)); } else { SetNextLoopTime(Game.Instance.ServerTime.AddMilliseconds(100)); } }
public IEnumerator EnterGameCoroutine() { //加载场景Prefab if (!string.IsNullOrEmpty(ScenePrefab)) { var ret = ResourceManager.PrepareResourceWithHolder <GameObject>(ScenePrefab, true, false); yield return(ret.Wait()); try { var sceneRoot = Instantiate(ret.Resource) as GameObject; if (null != sceneRoot) { sceneRoot.transform.parent = transform; // 优化场景特效 OptList <ParticleSystem> .List.Clear(); sceneRoot.transform.GetComponentsInChildren(true, OptList <ParticleSystem> .List); foreach (var particle in OptList <ParticleSystem> .List) { if (!particle.CompareTag("NoPauseEffect")) { if (particle.gameObject.GetComponent <ParticleOptimizer>() == null) { particle.gameObject.AddComponent <ParticleOptimizer>(); } } } Scene = sceneRoot.GetComponent <Scene>(); if (null != Scene) { Scene.InitPortal(); } else { Logger.Error("cant find Scene in ScenePerfab!!!"); } } SoundManager.Instance.SetAreaSoundMute(SoundManager.Instance.EnableBGM); // var sceneCacheKey = string.Format("{0}.unity3d", ScenePrefab); // ResourceManager.Instance.RemoveFromCache(sceneCacheKey); } catch (Exception e) { Logger.Error("step 0------------------{0}\n{1}", e.Message, e.StackTrace); } } if (ObjManager.Instance == null) { Logger.Log2Bugly("EnterGameCoroutine ObjManager.Instance = null "); yield break; } //清除ObjManager ObjManager.Instance.Reset(); if (PlayerDataManager.Instance == null || PlayerDataManager.Instance.mInitBaseAttr == null) { Logger.Log2Bugly("EnterGameCoroutine PlayerDataManager.Instance = null "); yield break; } var data = PlayerDataManager.Instance.mInitBaseAttr; var attr = new InitMyPlayerData(); //初始化造主角的数据 try { attr.ObjId = data.CharacterId; attr.DataId = data.RoleId; attr.Name = data.Name; attr.Camp = data.Camp; attr.IsDead = data.IsDead == 1; attr.HpMax = data.HpMax; attr.HpNow = data.HpNow; attr.MpMax = data.MpMax; attr.MpNow = data.MpMow; attr.X = data.X; attr.Y = GetTerrainHeight(data.X, data.Y); attr.Z = data.Y; attr.MoveSpeed = data.MoveSpeed; attr.AreaState = (eAreaState)data.AreaState; attr.EquipModel = data.EquipsModel; attr.ModelId = data.ModelId; { var __list1 = data.Buff; var __listCount1 = __list1.Count; for (var __i1 = 0; __i1 < __listCount1; ++__i1) { var buff = __list1[__i1]; { attr.Buff.Add(buff.BuffId, buff.BuffTypeId); } } } } catch (Exception e) { Logger.Error("step 1------------------{0}\n{1}", e.Message, e.StackTrace); } //造主角 ObjMyPlayer player = null; try { player = ObjManager.Instance.CreateMainPlayer(attr); if (player == null) { Logger.Log2Bugly("EnterGameCoroutine player = null "); yield break; } player.AdjustHeightPosition(); } catch (Exception e) { Logger.Error("step 2------------------{0}\n{1}", e.Message, e.StackTrace); } //设置buff try { EventDispatcher.Instance.DispatchEvent(new UIEvent_ClearBuffList()); var count = data.Buff.Count; for (var i = 0; i < count; i++) { var buffResult = data.Buff[i]; EventDispatcher.Instance.DispatchEvent(new UIEvent_SyncBuffCell(buffResult)); } } catch (Exception e) { Logger.Error("step 3------------------{0}\n{1}", e.Message, e.StackTrace); } //预加载技能资源 try { ObjManager.Instance.PrepareMainPlayerSkillResources(); } catch (Exception e) { Logger.Error("step 4------------------{0}\n{1}", e.Message, e.StackTrace); } //给主摄像机设置跟随,设置声音 try { if (MainCamera == null) { Logger.Log2Bugly("EnterGameCoroutine MainCamera = null "); yield break; } MainCamera.GetComponent <CameraController>().FollowObj = player.gameObject; { //audio listener var audioListerner = MainCamera.gameObject.GetComponent <AudioListener>(); if (null != audioListerner) { DestroyObject(audioListerner); } var playerAudio = player.gameObject.GetComponent <AudioListener>(); if (null == playerAudio) { player.gameObject.AddComponent <AudioListener>(); } } } catch (Exception e) { Logger.Error("step 5------------------{0}\n{1}", e.Message, e.StackTrace); } //初始化UI Coroutine co = null; try { co = StartCoroutine(InitUI()); if (null != LoadingLogic.Instance) { LoadingLogic.Instance.SetLoadingProgress(0.95f); } else { Logger.Error("LoadingLogic.Instance==null"); } } catch (Exception e) { Logger.Error("step 6------------------{0}\n{1}", e.Message, e.StackTrace); } if (null != co) { yield return(co); } //控制模块 try { InputManager.Instance.OnMoveDestination = mControl.MoveTo; InputManager.Instance.SelectTarget = mControl.SelectTarget; if (UIManager.Instance.MainUIFrame != null) { var main = UIManager.Instance.MainUIFrame.GetComponent <MainScreenFrame>(); var joystick = main.GetComponentInChildren <JoyStickLogic>(); if (joystick != null) { joystick.OnMoveDirection = mControl.MoveDirection; } SkillBar = main.SkillBar.GetComponent <BattleSkillRootFrame>(); if (SkillBar != null) { SkillBar.OnClickEvent = mControl.OnClickEvent; } } } catch (Exception e) { Logger.Error("step 7------------------{0}\n{1}", e.Message, e.StackTrace); } //UI try { EventDispatcher.Instance.DispatchEvent(new Enter_Scene_Event(Scene.SceneTypeId)); EventDispatcher.Instance.DispatchEvent(new RefresSceneMap(Scene.SceneTypeId)); UIManager.Instance.OpenDefaultFrame(); player.CreateNameBoard(); if (PlayerDataManager.Instance != null) { //根据场景不一样,自动战斗的优先级也不一样 PlayerDataManager.Instance.RefrehEquipPriority(); } } catch (Exception e) { Logger.Error("step 8------------------{0}\n{1}", e.Message, e.StackTrace); } //向服务器请求场景参数 yield return(StartCoroutine(AskSceneExtData())); //向服务器发送切换场景结束的包 if (SceneManager.Instance != null) { yield return(StartCoroutine(SceneManager.Instance.ChangeSceneOverCoroutine())); } else { Logger.Log2Bugly("EnterGameCoroutine SceneManager.Instance = null "); } //客户端切换场景结束事件 try { SceneEffect.OnEnterScecne(); LoadingLogic.Instance.SetLoadingProgress(1.0f); SceneManager.Instance.OnLoadSceneOver(); EventDispatcher.Instance.DispatchEvent(new LoadSceneOverEvent()); } catch (Exception e) { Logger.Error("step 9------------------{0}\n{1}", e.Message, e.StackTrace); } yield return(new WaitForSeconds(0.1f)); //播放CG try { Action brightnessStartWork = () => { LoginWindow.State = LoginWindow.LoginState.InGaming; var bc = Game.Instance.GetComponent <BrightnessController>(); if (bc) { bc.ResetTimer(); } }; if (1 == PlayFirstEnterGameCG) { #if UNITY_EDITOR var skip = true; #else bool skip = true; #endif if (0 == PlayerDataManager.Instance.GetRoleId() || 1 == PlayerDataManager.Instance.GetRoleId() || 2 == PlayerDataManager.Instance.GetRoleId()) { if (int.Parse(Table.GetClientConfig(1205).Value) == 1) { PlayCG.Instance.PlayCGFile("Video/HeroBorn.txt", brightnessStartWork, skip); PlatformHelper.UMEvent("PlayCG", "play", "Video/HeroBorn.txt"); } } EventDispatcher.Instance.DispatchEvent(new FirstEnterGameEvent(true)); PlayFirstEnterGameCG = 0; } else { brightnessStartWork(); } } catch (Exception e) { Logger.Error("step 10------------------{0}\n{1}", e.Message, e.StackTrace); } mControl.OnLoadSceneOver(); LoadOver = true; //优化loading读条速度,所以meshtree放在读条之后再加载 if (null != Scene) { StartCoroutine(DelayLoadTerrainMeshTree(ScenePrefab)); } if (!HasAdjustSetting) { HasAdjustSetting = true; StartCoroutine(ChangeSetting()); } LuaEventManager.Instance.PushEvent("OnEnterGameOver", Scene.SceneTypeId); }
public ObjCharacter SelectTargetForSkill(ObjCharacter player, SkillRecord skillRecord) { var skillTargetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(skillRecord, eModifySkillType.TargetType); if (GameControl.Instance.TargetObj != null && !GameControl.Instance.TargetObj.Dead && Instance.MyPlayer.IsMyEnemy(GameControl.Instance.TargetObj)) { // 这种技能,只能依靠自动瞄准,如果上一个目标可用,就继续打 if (skillTargetType != SkillTargetType.SECTOR && skillTargetType != SkillTargetType.RECT) { var dist = GameControl.GetSkillReleaseDistance(skillRecord); if (Vector3.Distance(player.Position, GameControl.Instance.TargetObj.Position) < dist) { return(GameControl.Instance.TargetObj); } } else { if (GameSetting.Instance.TargetSelectionAssistant && skillRecord.AutoEnemy == 1) { // 如果需要辅助瞄准,技能配置也需要辅助瞄准,而且上一个目标可用,就继续打它 var dist = GameControl.GetSkillReleaseDistance(skillRecord); if (Vector3.Distance(player.Position, GameControl.Instance.TargetObj.Position) < dist) { return(GameControl.Instance.TargetObj); } } else { // 如果不需要辅助瞄准,技能也配置了不需要辅助瞄准,那就不瞄准了 return(null); } } } ObjCharacter targetObj = null; if (skillTargetType == SkillTargetType.CIRCLE) { // nothing } else if (skillTargetType == SkillTargetType.SECTOR) { if (GameSetting.Instance.TargetSelectionAssistant && skillRecord.AutoEnemy == 1) { targetObj = SelectNearestCharacter(player.Position, character => !character.Dead && player.IsMyEnemy(character), skillRecord.TargetParam[0]); } } else if (skillTargetType == SkillTargetType.RECT) { if (GameSetting.Instance.TargetSelectionAssistant && skillRecord.AutoEnemy == 1) { targetObj = SelectNearestCharacter(player.Position, character => !character.Dead && player.IsMyEnemy(character), skillRecord.TargetParam[1]); } } else if (skillTargetType == SkillTargetType.TARGET_RECT) { targetObj = SelectNearestCharacter(player.Position, character => !character.Dead && player.IsMyEnemy(character)); } else if (skillTargetType == SkillTargetType.TARGET_SECTOR) { targetObj = SelectNearestCharacter(player.Position, character => !character.Dead && player.IsMyEnemy(character)); } else if (skillTargetType == SkillTargetType.SINGLE) { targetObj = SelectNearestCharacter(player.Position, character => !character.Dead && player.IsMyEnemy(character)); } else if (skillTargetType == SkillTargetType.TARGET_CIRCLE) { targetObj = SelectNearestCharacter(player.Position, character => !character.Dead && player.IsMyEnemy(character)); } return(targetObj); }
public bool SelectTarget(GameObject gameObject, int skill = -1) { //null鍒ゆ柇 if (null == gameObject) { return(false); } //鑾峰緱涓昏鑷繁 var myself = ObjManager.Instance.MyPlayer; if (null == myself) { return(false); } //鐩爣寰楁槸涓猳bj var obj = gameObject.GetComponent <ObjBase>(); if (null == obj) { return(false); } if (skill == -1) { TargetCharacter(obj); } //鍋滄褰撳墠鐨勬寚浠? //Executer.Stop(); //璁$畻鑷繁璺濈鐩爣鐨勮窛绂? var distance = Vector3.Distance(obj.Position, myself.Position); //榛樿鎶€鑳? var skillId = skill; if (skillId == -1) { skillId = PlayerDataManager.Instance.GetNormalSkill(); } if (obj.IsCharacter() && myself.IsMyEnemy(obj as ObjCharacter)) { if (obj.GetObjType() == OBJ.TYPE.NPC || obj.GetObjType() == OBJ.TYPE.RETINUE) { //濡傛灉鏄痭pc var npc = obj as ObjNPC; if (npc == null) { return(false); } if (!npc.CanBeInteractive()) { return(false); } } var character = obj as ObjCharacter; if (character.Dead) { return(false); } //瀵瑰叾閲婃斁鎶€鑳? var data = Table.GetSkill(skillId); //鐩爣绫诲瀷 var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType); //涓嶉渶瑕佺洰鏍囩殑鎶€鑳? if (targetType == SkillTargetType.SELF || targetType == SkillTargetType.CIRCLE || targetType == SkillTargetType.SECTOR || targetType == SkillTargetType.RECT) { //浣跨敤鎶€鑳? return(UseSkill(myself.GetObjId(), skillId, character.GetObjId())); } //闇€瑕佺洰鏍囩殑鎶€鑳? if (targetType == SkillTargetType.SINGLE || targetType == SkillTargetType.TARGET_CIRCLE || targetType == SkillTargetType.TARGET_RECT || targetType == SkillTargetType.TARGET_SECTOR) { var maxSkillDistance = GetSkillReleaseDistance(data); if (maxSkillDistance - 0.5 < 0.0f) { maxSkillDistance = 0.5f; } if (distance > maxSkillDistance - 0.5) { //璺濈涓嶅 var offset = maxSkillDistance - 1.0f; if (offset < 0.0f) { offset = 0.1f; } Executer.PushCommand(new MoveCommand(myself, character.Position, offset)); Executer.PushCommand(new AttackCommand(myself.GetObjId(), skillId, character.GetObjId())); } else { TargetObj = character; PlayerDataManager.Instance.SetSelectTargetData(TargetObj, 3); ObjManager.Instance.MyPlayer.FaceTo(character.Position); return(UseSkill(myself.GetObjId(), skillId, character.GetObjId())); } } else { Logger.Error("Unknow skill target type = {0}", targetType); } } else if (obj.GetObjType() == OBJ.TYPE.NPC) { var npc = obj as ObjNPC; if (!npc.CanBeInteractive()) { return(false); } if (npc.TableNPC.NpcType == (int)eNpcType.PickUpNpc) { if (distance > GameSetting.Instance.MaxDistance_NPC) { var command = new MoveCommand(myself, npc.Position, GameSetting.Instance.MaxDistance_NPC); Executer.PushCommand(command); return(false); } else { { if (!IsInit) { Table.ForeachWarFlag(tb => { WarFlagDic.Add(tb.Id, tb.FlagModel); return(true); }); Table.ForeachLode(tb => { if (tb.Id < 100000) { LodeDic.Add(tb.Id, tb.NpcId); } else if (tb.Id >= 100000 && tb.Id <= 100020)//策划指定墓碑使用此区间 { MonumentDic.Add(tb.Id, tb.NpcId); } return(true); }); IsInit = true; } var npcId = npc.TableNPC.Id; if (WarFlagDic.ContainsValue(npcId)) { //战旗 PlayerDataManager.Instance.HoldLode(npcId); return(false); } else if (LodeDic.ContainsValue(npcId)) { //采矿 PlayerDataManager.Instance.CollectLode(npcId); return(false); } else if (MonumentDic.ContainsValue(npcId)) { //祭拜 PlayerDataManager.Instance.WorshipMonument(npcId); return(false); } } EventDispatcher.Instance.DispatchEvent(new PickUpNpc_Event(npc.GetDataId(), npc.GetObjId())); return(false); } } var npcDataId = npc.GetDataId(); if (npcDataId >= 108 && npcDataId <= 110)//判断是否是排行NPC { EventDispatcher.Instance.DispatchEvent(new OnRankNpcClick_Event(npcDataId)); } myself.StopMove(); if (distance <= GameSetting.Instance.MaxDistance_NPC) { if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId())) { npc.DoDialogue(); //TODO if (myself.IsAutoFight()) { myself.LeaveAutoCombat(); } } } else { var command = new MoveCommand(myself, npc.Position, GameSetting.Instance.MaxDistance_NPC); Executer.PushCommand(command); var command1 = new FuncCommand(() => { if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId())) { npc.DoDialogue(); //TODO if (myself.IsAutoFight()) { myself.LeaveAutoCombat(); } } }); Executer.PushCommand(command1); } } else if (obj.GetObjType() == OBJ.TYPE.DROPITEM) { //濡傛灉鏄帀钀界墿鍝? var dropItem = obj as ObjDropItem; myself.StopMove(); var dis = GameSetting.Instance.MaxDistance_DropItem; if (dropItem.mTableData != null && dropItem.mTableData.Type == 300) { dis = GameUtils.AutoPickUpBuffDistance; } if (distance <= dis) { dropItem.Pickup(); } else { var command = new MoveCommand(myself, dropItem.Position, dis); Executer.PushCommand(command); var command1 = new FuncCommand(() => { if (null != dropItem) { dropItem.Pickup(); } }); Executer.PushCommand(command1); } } else if (obj.GetObjType() == OBJ.TYPE.FAKE_CHARACTER) { if (((ObjFakeCharacter)obj).iType == (int)eFakeCharacterTypeDefine.MieShiFakeCharacterType) { EventDispatcher.Instance.DispatchEvent(new ApplyPortraitAward_Event(obj.GetDataId())); } else { if (((ObjFakeCharacter)obj).iType == (int)OBJ.TYPE.FAKE_FIGHTLEADER) { if (GuideTrigger.IsFunctionOpen("BtnRank")) { var e = new Show_UI_Event(UIConfig.RankUI, new RankArguments { RankId = obj.GetObjId() }); EventDispatcher.Instance.DispatchEvent(e); } else { EventDispatcher.Instance.DispatchEvent(new ShowUIHintBoard(1736)); } } else { EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.WorshipFrame)); } } } return(false); }
/// <summary> /// 鏀诲嚮鎸夐挳 /// </summary> /// <param name="skillId">鎶€鑳絀d</param> /// <returns></returns> public bool OnAttackBtnClick(int skillId, bool selectTarget = true) { Logger.Info("OnAttackBtnClick SkillID = " + skillId); PlatformHelper.Event("Skill", "Manual", skillId); var myself = ObjManager.Instance.MyPlayer; //琛ㄦ牸鏁版嵁 var data = Table.GetSkill(skillId); if (data == null) { return(false); } if (selectTarget) { TargetObj = ObjManager.Instance.SelectTargetForSkill(myself, data); } //鐩爣绫诲瀷 var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType); if (targetType == SkillTargetType.SELF || targetType == SkillTargetType.CIRCLE) { return(UseSkill(myself.GetObjId(), skillId)); } if (targetType == SkillTargetType.SECTOR) { var targetObj = TargetObj; if (targetObj != null) { myself.FaceTo(targetObj.Position); return(UseSkill(myself.GetObjId(), skillId, targetObj.GetObjId())); } return(UseSkill(myself.GetObjId(), skillId)); } if (targetType == SkillTargetType.RECT) { var targetObj = TargetObj; if (targetObj != null) { myself.FaceTo(targetObj.Position); return(UseSkill(myself.GetObjId(), skillId)); } return(UseSkill(myself.GetObjId(), skillId)); } if (targetType == SkillTargetType.SINGLE || targetType == SkillTargetType.TARGET_CIRCLE || targetType == SkillTargetType.TARGET_RECT || targetType == SkillTargetType.TARGET_SECTOR) { var targetObj = TargetObj; if (targetObj == null || targetObj.Dead) { targetObj = ObjManager.Instance.SelectNearestCharacter(ObjManager.Instance.MyPlayer.Position, character => !character.Dead && ObjManager.Instance.MyPlayer.IsMyEnemy(character)); } if (null == targetObj || targetObj.Dead) { EventDispatcher.Instance.DispatchEvent(new ShowUIHintBoard(713)); return(false); } return(SelectTarget(targetObj.gameObject, skillId)); } Logger.Info("Unknow target type[{0}]", targetType); return(false); }
public bool SelectTarget(GameObject gameObject, int skill = -1) { //null判断 if (null == gameObject) { return(false); } //获得主角自己 var myself = ObjManager.Instance.MyPlayer; if (null == myself) { return(false); } //目标得是个obj var obj = gameObject.GetComponent <ObjBase>(); if (null == obj) { return(false); } if (skill == -1) { TargetCharacter(obj); } //停止当前的指�? //Executer.Stop(); //计算自己距离目标的距�? var distance = Vector3.Distance(obj.Position, myself.Position); //默认技�? var skillId = skill; if (skillId == -1) { skillId = PlayerDataManager.Instance.GetNormalSkill(); } if (obj.IsCharacter() && myself.IsMyEnemy(obj as ObjCharacter)) { if (obj.GetObjType() == OBJ.TYPE.NPC || obj.GetObjType() == OBJ.TYPE.RETINUE) { //如果是npc var npc = obj as ObjNPC; if (npc == null) { return(false); } if (!npc.CanBeInteractive()) { return(false); } } var character = obj as ObjCharacter; if (character.Dead) { return(false); } //对其释放技�? var data = Table.GetSkill(skillId); //目标类型 var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType); //不需要目标的技�? if (targetType == SkillTargetType.SELF || targetType == SkillTargetType.CIRCLE || targetType == SkillTargetType.SECTOR || targetType == SkillTargetType.RECT) { //使用技�? return(UseSkill(myself.GetObjId(), skillId, character.GetObjId())); } //需要目标的技�? if (targetType == SkillTargetType.SINGLE || targetType == SkillTargetType.TARGET_CIRCLE || targetType == SkillTargetType.TARGET_RECT || targetType == SkillTargetType.TARGET_SECTOR) { var maxSkillDistance = GetSkillReleaseDistance(data); if (maxSkillDistance - 0.5 < 0.0f) { maxSkillDistance = 0.5f; } if (distance > maxSkillDistance - 0.5) { //距离不够 var offset = maxSkillDistance - 1.0f; if (offset < 0.0f) { offset = 0.1f; } Executer.PushCommand(new MoveCommand(myself, character.Position, offset)); Executer.PushCommand(new AttackCommand(myself.GetObjId(), skillId, character.GetObjId())); } else { TargetObj = character; PlayerDataManager.Instance.SetSelectTargetData(TargetObj, 3); ObjManager.Instance.MyPlayer.FaceTo(character.Position); return(UseSkill(myself.GetObjId(), skillId, character.GetObjId())); } } else { Logger.Error("Unknow skill target type = {0}", targetType); } } else if (obj.GetObjType() == OBJ.TYPE.NPC) { var npc = obj as ObjNPC; if (!npc.CanBeInteractive()) { return(false); } if (npc.TableNPC.NpcType == (int)eNpcType.PickUpNpc) { EventDispatcher.Instance.DispatchEvent(new PickUpNpc_Event(npc.GetDataId(), npc.GetObjId())); return(false); } myself.StopMove(); if (distance <= GameSetting.Instance.MaxDistance_NPC) { if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId())) { npc.DoDialogue(); //TODO if (myself.IsAutoFight()) { myself.LeaveAutoCombat(); } } } else { var command = new MoveCommand(myself, npc.Position, GameSetting.Instance.MaxDistance_NPC); Executer.PushCommand(command); var command1 = new FuncCommand(() => { if (MissionManager.Instance.OpenMissionByNpcId(npc.GetDataId(), npc.GetObjId())) { npc.DoDialogue(); //TODO if (myself.IsAutoFight()) { myself.LeaveAutoCombat(); } } }); Executer.PushCommand(command1); } } else if (obj.GetObjType() == OBJ.TYPE.DROPITEM) { //如果是掉落物�? var dropItem = obj as ObjDropItem; myself.StopMove(); if (distance <= GameSetting.Instance.MaxDistance_DropItem) { dropItem.Pickup(); } else { var command = new MoveCommand(myself, dropItem.Position, GameSetting.Instance.MaxDistance_DropItem); Executer.PushCommand(command); var command1 = new FuncCommand(() => { if (null != dropItem) { dropItem.Pickup(); } }); Executer.PushCommand(command1); } } else if (obj.GetObjType() == OBJ.TYPE.FAKE_CHARACTER) { if (((ObjFakeCharacter)obj).iType == (int)eFakeCharacterTypeDefine.MieShiFakeCharacterType) { EventDispatcher.Instance.DispatchEvent(new ApplyPortraitAward_Event(obj.GetDataId())); } else { EventDispatcher.Instance.DispatchEvent(new Show_UI_Event(UIConfig.WorshipFrame)); } } return(false); }
private void ShowSkillIndicator(BuffResult buff, ObjCharacter character) { var skillId = buff.Param[0]; var data = Table.GetSkill(skillId); if (data == null) { Logger.Log2Bugly("ShowSkillIndicator data =null"); return; } if (GameLogic.Instance == null || GameLogic.Instance.Scene == null) { Logger.Log2Bugly("ShowSkillIndicator GameLogic.Instance =null"); return; } //SkillTargetType targetType = (SkillTargetType)data.TargetType; var targetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetType); if (targetType == SkillTargetType.CIRCLE) { // correct the direction of npc or monster. character.TargetDirection = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f); var para0 = ObjMyPlayer.GetSkillData_Data(data, eModifySkillType.TargetParam1); GameLogic.Instance.Scene.CreateSkillRangeIndicator(character.gameObject, Scene.SkillRangeIndicatorType.Circle, para0, 0, Color.red, (caster, receiver) => { StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(caster); Destroy(receiver); })); }, true); } else if (targetType == SkillTargetType.SECTOR || targetType == SkillTargetType.TARGET_SECTOR) { // correct the direction of npc or monster. character.TargetDirection = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f); GameLogic.Instance.Scene.CreateSkillRangeIndicator(character.gameObject, Scene.SkillRangeIndicatorType.Fan, data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) => { StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(caster); Destroy(receiver); })); }, true); } else if (targetType == SkillTargetType.RECT || targetType == SkillTargetType.TARGET_RECT) { // correct the direction of npc or monster. character.TargetDirection = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f); GameLogic.Instance.Scene.CreateSkillRangeIndicator(character.gameObject, Scene.SkillRangeIndicatorType.Rectangle, data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) => { StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(caster); Destroy(receiver); })); }, true); } else if (targetType == SkillTargetType.SINGLE || targetType == SkillTargetType.TARGET_CIRCLE) { var x = buff.Param[1] / 100.0f; var z = buff.Param[2] / 100.0f; var y = GameLogic.GetTerrainHeight(x, z); var o = new GameObject(); var objTransform = o.transform; objTransform.parent = GameLogic.Instance.Scene.GlobalSkillIndicatorRoot.transform; objTransform.position = new Vector3(x, y, z); objTransform.forward = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f); if (targetType == SkillTargetType.TARGET_CIRCLE) { GameLogic.Instance.Scene.CreateSkillRangeIndicator(o, Scene.SkillRangeIndicatorType.Circle, data.TargetParam[0], 0, Color.red, (caster, receiver) => { StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(o); })); }, true); } else if (targetType == SkillTargetType.TARGET_SECTOR) { GameLogic.Instance.Scene.CreateSkillRangeIndicator(o, Scene.SkillRangeIndicatorType.Fan, data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) => { var casterTransform = caster.transform; casterTransform.position = new Vector3(x, y, z); casterTransform.forward = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f); StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(o); })); }, true); } else if (targetType == SkillTargetType.TARGET_RECT) { GameLogic.Instance.Scene.CreateSkillRangeIndicator(o, Scene.SkillRangeIndicatorType.Rectangle, data.TargetParam[0], data.TargetParam[1], Color.red, (caster, receiver) => { var casterTransform = caster.transform; casterTransform.position = new Vector3(x, y, z); casterTransform.forward = new Vector3(buff.Param[3] / 1000.0f, 0, buff.Param[4] / 1000.0f); StartCoroutine(WaitToDoSomething(TimeSpan.FromMilliseconds(buff.Param[5]), () => { Destroy(o); })); }, true); } } }
public IEnumerator EnterGameCoroutine() { Stopwatch sw = new Stopwatch(); Stopwatch swTotal = new Stopwatch(); swTotal.Start(); string log = ""; //加载场景Prefab if (!string.IsNullOrEmpty(ScenePrefab)) { sw.Start(); var ret = ResourceManager.PrepareResourceWithHolder <GameObject>(ScenePrefab, true, true, true, true, true); yield return(ret.Wait()); EventDispatcher.Instance.DispatchEvent(new LoadingPercentEvent(0.6f)); try { var sceneRoot = Instantiate(ret.Resource) as GameObject; sw.Stop(); log += "\nScenePrefab---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; if (null != sceneRoot) { sceneRoot.transform.parent = transform; sw.Reset(); sw.Start(); // 优化场景特效 OptList <ParticleSystem> .List.Clear(); sceneRoot.transform.GetComponentsInChildren(true, OptList <ParticleSystem> .List); foreach (var particle in OptList <ParticleSystem> .List) { if (!particle.CompareTag("NoPauseEffect")) { if (particle.gameObject.GetComponent <ParticleOptimizer>() == null) { particle.gameObject.AddComponent <ParticleOptimizer>(); } } } sw.Stop(); log += "\nParticleOptimizer---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); Scene = sceneRoot.GetComponent <Scene>(); if (null != Scene) { Scene.InitPortal(); } else { Logger.Error("cant find Scene in ScenePerfab!!!"); } sw.Stop(); log += "\nInitPortal---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; } sw.Reset(); sw.Start(); if (Scene.StaticChildren) { StaticBatchingUtility.Combine(Scene.StaticChildren); } else { StaticBatchingUtility.Combine(sceneRoot); } sw.Stop(); log += "\nStaticBatchingUtility---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); SoundManager.Instance.SetAreaSoundEnable(SoundManager.Instance.EnableBGM); // var sceneCacheKey = string.Format("{0}.unity3d", ScenePrefab); // ResourceManager.Instance.RemoveFromCache(sceneCacheKey); sw.Stop(); log += "\nSetAreaSoundEnable---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; } catch (Exception e) { Logger.Error("step 0------------------{0}\n{1}", e.Message, e.StackTrace); } } if (ObjManager.Instance == null) { Logger.Log2Bugly("EnterGameCoroutine ObjManager.Instance = null "); yield break; } //清除ObjManager ObjManager.Instance.Reset(); if (PlayerDataManager.Instance == null || PlayerDataManager.Instance.mInitBaseAttr == null) { Logger.Log2Bugly("EnterGameCoroutine PlayerDataManager.Instance = null "); yield break; } sw.Reset(); sw.Start(); var data = PlayerDataManager.Instance.mInitBaseAttr; var attr = new InitMyPlayerData(); //初始化造主角的数据 try { attr.ObjId = data.CharacterId; attr.DataId = data.RoleId; attr.Name = data.Name; attr.Camp = data.Camp; attr.IsDead = data.IsDead == 1; attr.HpMax = data.HpMax; attr.HpNow = data.HpNow; attr.MpMax = data.MpMax; attr.MpNow = data.MpMow; attr.X = data.X; attr.Y = GetTerrainHeight(data.X, data.Y); attr.Z = data.Y; attr.MoveSpeed = data.MoveSpeed; attr.AreaState = (eAreaState)data.AreaState; attr.EquipModel = data.EquipsModel; attr.ModelId = data.ModelId; attr.MountId = data.MountId; { var __list1 = data.Buff; var __listCount1 = __list1.Count; for (var __i1 = 0; __i1 < __listCount1; ++__i1) { var buff = __list1[__i1]; { attr.Buff.Add(buff.BuffId, buff.BuffTypeId); } } } } catch (Exception e) { Logger.Error("step 1------------------{0}\n{1}", e.Message, e.StackTrace); } //造主角 ObjMyPlayer player = null; try { player = ObjManager.Instance.CreateMainPlayer(attr); if (player == null) { Logger.Log2Bugly("EnterGameCoroutine player = null "); yield break; } if (PlayFirstEnterGameCG == 1 && GameSetting.Instance.ReviewState == 1) { var reivewRecord = GameSetting.Instance.GetReviewRecord(); if (reivewRecord != null) { var transPos = new Vector3(); transPos.x = reivewRecord.posX; transPos.y = GetTerrainHeight(reivewRecord.posX, reivewRecord.posY); transPos.z = reivewRecord.posY; player.transform.position = transPos; GameUtils.FlyTo(3, reivewRecord.posX, reivewRecord.posY); } } player.AdjustHeightPosition(); } catch (Exception e) { Logger.Error("step 2------------------{0}\n{1}", e.Message, e.StackTrace); } sw.Stop(); log += "\nObjMyPlayer---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); //设置buff try { EventDispatcher.Instance.DispatchEvent(new UIEvent_ClearBuffList()); var count = data.Buff.Count; for (var i = 0; i < count; i++) { var buffResult = data.Buff[i]; EventDispatcher.Instance.DispatchEvent(new UIEvent_SyncBuffCell(buffResult)); } } catch (Exception e) { Logger.Error("step 3------------------{0}\n{1}", e.Message, e.StackTrace); } sw.Stop(); log += "\nUIEvent_ClearBuffList---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); //预加载技能资源 try { ObjManager.Instance.PrepareMainPlayerSkillResources(); } catch (Exception e) { Logger.Error("step 4------------------{0}\n{1}", e.Message, e.StackTrace); } sw.Stop(); log += "\nPrepareMainPlayerSkillResources---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); //给主摄像机设置跟随,设置声音 try { if (MainCamera == null) { Logger.Log2Bugly("EnterGameCoroutine MainCamera = null "); yield break; } MainCamera.GetComponent <CameraController>().FollowObj = player.gameObject; { //audio listener var audioListerner = MainCamera.gameObject.GetComponent <AudioListener>(); if (null != audioListerner) { DestroyObject(audioListerner); } var playerAudio = player.gameObject.GetComponent <AudioListener>(); if (null == playerAudio) { player.gameObject.AddComponent <AudioListener>(); } } } catch (Exception e) { Logger.Error("step 5------------------{0}\n{1}", e.Message, e.StackTrace); } sw.Stop(); log += "\nCameraController---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); //初始化UI Coroutine co = null; try { co = StartCoroutine(InitUI()); } catch (Exception e) { Logger.Error("step 6------------------{0}\n{1}", e.Message, e.StackTrace); } if (null != co) { yield return(co); } sw.Stop(); log += "\nInitUI---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; EventDispatcher.Instance.DispatchEvent(new LoadingPercentEvent(0.7f)); sw.Reset(); sw.Start(); //UI // try { EventDispatcher.Instance.DispatchEvent(new Enter_Scene_Event(Scene.SceneTypeId)); EventDispatcher.Instance.DispatchEvent(new RefresSceneMap(Scene.SceneTypeId)); player.CreateNameBoard(); if (PlayerDataManager.Instance != null) { //根据场景不一样,自动战斗的优先级也不一样 PlayerDataManager.Instance.RefrehEquipPriority(); } } // catch (Exception e) // { // Logger.Error("step 7------------------{0}\n{1}", e.Message, e.StackTrace); // } sw.Stop(); log += "\nUI---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); //向服务器发送切换场景结束的包 if (SceneManager.Instance != null) { //yield return StartCoroutine(SceneManager.Instance.ChangeSceneOverCoroutine()); StartCoroutine(SceneManager.Instance.ChangeSceneOverCoroutine()); } else { Logger.Log2Bugly("EnterGameCoroutine SceneManager.Instance = null "); } sw.Stop(); log += "\nChangeSceneOverCoroutine---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; sw.Reset(); sw.Start(); //客户端切换场景结束事件 try { SceneEffect.OnEnterScecne(); var formersceneid = Scene.SceneTypeId; SceneManager.Instance.OnLoadSceneOver(formersceneid); EventDispatcher.Instance.DispatchEvent(new LoadSceneOverEvent()); } catch (Exception e) { Logger.Error("step 9------------------{0}\n{1}", e.Message, e.StackTrace); } sw.Stop(); log += "\nOnLoadSceneOver---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; //如果还没有Cache或者UIManger的Cache里没配这个UI,那就在这Cache if (!HasCache) { sw.Reset(); sw.Start(); var args = new UIInitArguments { Args = new List <int> { -1 } }; yield return(StartCoroutine(UIManager.Instance.ShowUICoroutine(UIConfig.EraBookUI, args))); yield return(new WaitForEndOfFrame()); EventDispatcher.Instance.DispatchEvent(new Close_UI_Event(UIConfig.EraBookUI)); //解决关闭灭世地图会打开书的bug for (int i = 0; i < UIManager.Instance.mRecordStack.Count; i++) { if (UIManager.Instance.mRecordStack[i].Config == UIConfig.EraBookUI) { UIManager.Instance.mRecordStack.Remove(UIManager.Instance.mRecordStack[i]); break; } } sw.Stop(); log += "\nEraBookUI---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; HasCache = true; } yield return(new WaitForEndOfFrame()); EventDispatcher.Instance.DispatchEvent(new LoadingPercentEvent(0.9f)); sw.Reset(); sw.Start(); //播放CG try { Action brightnessStartWork = () => { LoginLogic.State = LoginLogic.LoginState.InGaming; var bc = Game.Instance.GetComponent <BrightnessController>(); if (bc) { bc.ResetTimer(); } }; if (1 == PlayFirstEnterGameCG) { #if UNITY_EDITOR var skip = true; #else bool skip = true; #endif if (0 == PlayerDataManager.Instance.GetRoleId() || 1 == PlayerDataManager.Instance.GetRoleId() || 2 == PlayerDataManager.Instance.GetRoleId()) { if (int.Parse(Table.GetClientConfig(1205).Value) == 1) { PlayCG.Instance.PlayCGFile("Video/HeroBorn.txt", brightnessStartWork, skip); PlatformHelper.UMEvent("PlayCG", "play", "Video/HeroBorn.txt"); } } EventDispatcher.Instance.DispatchEvent(new FirstEnterGameEvent(true)); PlayFirstEnterGameCG = 0; } else { brightnessStartWork(); } } catch (Exception e) { Logger.Error("step 10------------------{0}\n{1}", e.Message, e.StackTrace); } try { if (null != GameLogic.Instance) { GameLogic.Instance.AttachControl(); } } catch (Exception e) { Logger.Error("step 8------------------{0}\n{1}", e.Message, e.StackTrace); } mControl.OnLoadSceneOver(); LoadOver = true; //优化loading读条速度,所以meshtree放在读条之后再加载 if (null != Scene) { StartCoroutine(DelayLoadTerrainMeshTree()); } StartCoroutine(DelayShowLoginRewardUI()); if (!HasAdjustSetting) { HasAdjustSetting = true; // StartCoroutine(ChangeSetting()); 暂时屏蔽掉了自动降低配置功能 } //LuaEventManager.Instance.PushEvent("OnEnterGameOver", Scene.SceneTypeId); sw.Stop(); log += "\nOVER---------" + sw.ElapsedMilliseconds + "------------" + swTotal.ElapsedMilliseconds; UnityEngine.Debug.Log(log); }
private void AutoFight() { var skillId = GetCurrentSkill(); var tbSkill = Table.GetSkill(skillId); if (tbSkill == null) { CancelLoop(); return; } var skillTargetType = (SkillTargetType)ObjMyPlayer.GetSkillData_Data(tbSkill, eModifySkillType.TargetType); if (mIsCheckFubenLogicId) { if (CheckDungeonLogic()) { return; } } if (tbSkill.CampType != 0) { if (skillTargetType == SkillTargetType.SELF || skillTargetType == SkillTargetType.CIRCLE || skillTargetType == SkillTargetType.SECTOR) { UseSkill(skillId); return; } } var targetObj = GameControl.Instance.TargetObj; if (targetObj == null || targetObj.Dead) { targetObj = null; //是否离挂机点太远 if (IsMoveBack()) { GameControl.Instance.TargetObj = null; MoveStartPosition(); return; } //找下一个目标,包含掉落物 var ret = SerchNearObj(true); if (ret != null) { if (ret.IsCharacter()) { //找到一个敌人 targetObj = ret as ObjCharacter; if (targetObj != null) { if (IsFarFromBegin(targetObj.Position)) { //最近的目标太远了,不去移动,而去返回 GameControl.Instance.TargetObj = null; MoveStartPosition(); return; } GameControl.Instance.TargetObj = targetObj; } } else { if (ret.GetObjType() == OBJ.TYPE.DROPITEM) { //找到一个掉落 var drop = ret as ObjDropItem; if (drop != null) { mTargetPostion = drop.Position; drop.HasAutoFightMove = true; MoveDrop(); } else { //异常处理 CancelLoop(); } return; } } } } if (targetObj == null) { if (mIsFuben) { if (CheckDungeonLogic()) { return; } } if (mMonsterPoint == false) { mMonsterPoint = true; MoveMonsterArea(); return; } var logciId = Scene.LogicId; if (logciId == -1) { //没有目标 回到原点 MoveStartPosition(); } return; } //检查距离 并放技能 CheckNearObjDistance(); }