/// <summary> /// 当主主角使用技能成功时 /// </summary> protected void OnMainPlayerUseAbility() { SmartActor target = owner.CurTarget as SmartActor; if (target == null) { return; } if (PlayerAutoFightFSM.IsEnemy(target)) { switch (target.typeID) { case ObjectType.Entourage: case ObjectType.Player: if (lastPvpTraceTarget != target) { lastPvpTraceTarget = target; stateMachine.Send((int)EventType.PVP_FIGHT_TRACE); } break; case ObjectType.MOB: if (lastPveTraceTarget != target) { lastPveTraceTarget = target; stateMachine.Send((int)EventType.PVE_TRACE); } break; default: break; } } }
protected void OnCampUpdate(int _camp) { if (IsActor) { return; } IsFriend = !PlayerAutoFightFSM.IsEnemy(this); if (headTextCtrl != null) { // if (headTextCtrl.HasShowBlood) // { // headTextCtrl.SetBlood(actorInfo.MaxHP <= 0 ? 0 : actorInfo.CurHP / (float)actorInfo.MaxHP, IsFriend); // } headTextCtrl.SetNameColorAlongInterActive(); } }
/// <summary> /// 尽量避免使用Awake等unity控制流程的接口来初始化,而改用自己调用的接口 by吴江 /// </summary> protected override void Init() { base.Init(); if (actorInfo != null) { id = actorInfo.ServerInstanceID; } rendererCtrl = base.rendererCtrl as SmartActorRendererCtrl; animFSM = base.animFSM as SmartActorAnimFSM; foreach (BuffInfo item in actorInfo.BuffList.Values) { OnBuffUpdate(item.BuffTypeID, true); } if (GameCenter.curMainPlayer != null) { IsFriend = !PlayerAutoFightFSM.IsEnemy(this); } }
/// <summary> /// 切换目标怪物 /// </summary> public static SmartActor GetAnotherSmartActor(this GameStage _gameStage, int _old, Vector3 _comparePos) { List <Monster> monsters = _gameStage.GetMobs(); List <OtherPlayer> opcs = _gameStage.GetOtherPlayers(); List <SmartActor> sActors = new List <SmartActor>(); int selfCamp = GameCenter.curMainPlayer.Camp; SceneType sceneType = GameCenter.curGameStage.SceneType; SceneRef sceneRef = GameCenter.mainPlayerMng.MainPlayerInfo.CurSceneRef; for (int i = 0; i < opcs.Count; i++) { if (sceneRef != null && sceneRef.pk_mode == 0) { break; //不强制玩家切换PK模式的场景里,切换目标不锁定玩家 } OtherPlayer opc = opcs[i]; if (opc.isDead || opc.actorInfo.IsHide) { continue; } if (PlayerAutoFightFSM.IsEnemy(opc) && !opc.IsActor && !opc.isDead) //修改玩家是否敌对判断 by邓成 { if ((_comparePos - opc.transform.position).sqrMagnitude <= 15.0f * 15.0f) //2015/12/30 翟照要求15距离以内 { sActors.Add(opc); } } } for (int i = 0; i < monsters.Count; i++) { Monster mob = monsters[i]; if (mob.isDummy || !mob.IsShowing || mob.isDead) { continue; } if (GameCenter.mainPlayerMng.MainPlayerInfo.CurSceneRef != null) { if (GameCenter.mainPlayerMng.MainPlayerInfo.CurSceneRef.sort == SceneType.SCUFFLEFIELD) { if (GameCenter.systemSettingMng.IsHideBoss && mob.actorInfo.IsBoss) { continue;//自动寻怪避开BOSS by黄洪兴 } } } if (ConfigMng.Instance.GetRelationType(selfCamp, mob.Camp, sceneType) == RelationType.AUTOMATEDATTACKS && !mob.IsActor && !mob.isDead) { if ((_comparePos - mob.transform.position).sqrMagnitude <= 15.0f * 15.0f) //2015/12/30 翟照要求15距离以内 { sActors.Add(mob); } } } int count = sActors.Count; if (count == 0) { return(null); } if (count == 1) { return(sActors[0]); } System.Random rm = new System.Random(); int flag = 0; while (true) { flag++; if (flag > count) { break; } int index = rm.Next(0, count - 1); SmartActor monster = sActors[index]; if (monster.id != _old) { return(monster); } } return(null); }