private void ChangeCameraToPartner(ArenaStateInfo state) { NpcInfo not_dead_partner = FindNotdeadPartner(state.CreatedPartners); if (not_dead_partner != null) { NpcView view = EntityManager.Instance.GetNpcViewById(not_dead_partner.GetId()); if (view != null) { GfxSystem.SendMessage("GfxGameRoot", "CameraFollow", view.Actor); state.CurCameraTargetPartner = not_dead_partner.GetId(); } } }
private void OnNpcMeetEnemy(NpcInfo npc, Animation_Type animType) { CharacterView view = EntityManager.Instance.GetCharacterViewById(npc.GetId()); if (null != view) { GfxSystem.SendMessage(view.Actor, "OnEventMeetEnemy", null); } ImpactSystem.Instance.SendImpactToCharacter(npc, npc.GetMeetEnemyImpact(), npc.GetId(), -1, -1, npc.GetMovementStateInfo().GetPosition3D(), npc.GetMovementStateInfo().GetFaceDir()); }
protected override void OnStateLogicInit(NpcInfo npc, AiCommandDispatcher aiCmdDispatcher, long deltaTime) { NpcAiStateInfo info = npc.GetAiStateInfo(); info.Time = 0; npc.GetMovementStateInfo().IsMoving = false; info.Target = 0; BlackBoard_SmallMouse blackBoradInfo = GetBlackBorad(npc); blackBoradInfo.AddAliveNpc(npc.GetId()); }
public override void Execute(SceneLogicInfo info, long deltaTime) { if (null == info || info.IsLogicFinished || info.IsLogicPaused) { return; } info.Time += deltaTime; if (info.Time > 100) { NpcInAreaLogicInfo data = info.LogicDatas.GetData <NpcInAreaLogicInfo>(); if (null == data) { data = new NpcInAreaLogicInfo(); info.LogicDatas.AddData <NpcInAreaLogicInfo>(data); SceneLogicConfig sc = info.SceneLogicConfig; if (null != sc) { if (null != sc) { List <float> pts = Converter.ConvertNumericList <float>(sc.m_Params[0]); data.m_Area = new Vector3[pts.Count / 2]; for (int ix = 0; ix < pts.Count - 1; ix += 2) { data.m_Area[ix / 2].X = pts[ix]; data.m_Area[ix / 2].Z = pts[ix + 1]; } } } } info.Time = 0; if (null != data) { info.SpatialSystem.VisitObjectOutPolygon(data.m_Area, (float distSqr, ArkCrossEngineSpatial.ISpaceObject obj) => { if (obj.GetObjType() == ArkCrossEngineSpatial.SpatialObjType.kNPC) { NpcInfo npc = obj.RealObject as NpcInfo; if (null != npc && !npc.IsDead()) { npc.SetHp(Operate_Type.OT_Absolute, 0); SceneLogicSendStoryMessage(info, "npcleavearea", npc.GetId()); } } }); } } }
public void UpdateTarget(NpcInfo npc) { if (npc.GetAIEnable()) { NpcAiStateInfo npcAi = npc.GetAiStateInfo(); long curTime = TimeUtility.GetServerMilliseconds(); if (npcAi.Target > 0) { if (curTime > npcAi.LastChangeTargetTime + m_ChangeTargetCD && curTime > npc.GetCombatStatisticInfo().LastHitTime + m_MaxChaseTime) { npcAi.Target = 0; NotifyNpcTargetChange(npc); npcAi.LastChangeTargetTime = curTime; LogSystem.Debug("Npc {0} changed target", npc.GetId()); } } } }
internal void Create(NpcInfo npc) { Init(); if (null != npc) { m_Npc = npc; ObjectInfo.UnitId = m_Npc.GetUnitId(); ObjectInfo.CampId = m_Npc.GetCampId(); ObjectInfo.LinkId = m_Npc.GetLinkId(); MovementStateInfo msi = m_Npc.GetMovementStateInfo(); Vector3 pos = msi.GetPosition3D(); float dir = msi.GetFaceDir(); CreateActor(m_Npc.GetId(), m_Npc.GetModel(), pos, dir, m_Npc.Scale); npc.ActorId = Actor; ObjectInfo.IsNpc = true; CreateBornEffect(Actor, npc.GetBornEffect(), npc.ParticleScale, npc.GetBornEffectTime()); InitAnimationSets(); } }
private void RecycleNpcInfo(NpcInfo npcInfo) { if (null != npcInfo) { int id = npcInfo.GetId(); if (id >= c_StartId && id < c_StartId + c_MaxIdNum) { m_UnusedIds.Push(id); } if (id >= c_StartId_Client && id < c_StartId_Client + c_MaxIdNum) { m_UnusedClientIds.Push(id); } if (m_UnusedNpcs.Count < m_NpcPoolSize) { npcInfo.Reset(); m_UnusedNpcs.Enqueue(npcInfo); } } }
public NpcInfo AddNpc(int id, Data_Unit unit) { NpcInfo npc = NewNpcInfo(id); npc.SceneContext = m_SceneContext; npc.LoadData(unit); npc.IsBorning = true; npc.SetAIEnable(false); npc.SetStateFlag(Operate_Type.OT_AddBit, CharacterState_Type.CST_Invincible); npc.BornTime = TimeUtility.GetServerMilliseconds(); m_Npcs.AddLast(npc.GetId(), npc); if (null != m_SceneContext && null != m_SceneContext.SpatialSystem) { m_SceneContext.SpatialSystem.AddObj(npc.SpaceObject); } if (null != m_SceneContext && null != m_SceneContext.SightManager) { m_SceneContext.SightManager.AddObject(npc); } return(npc); }
public void Execute(NpcInfo npc, AiCommandDispatcher aiCmdDispatcher, long deltaTime) { if (npc.GetAIEnable()) { NpcAiStateInfo npcAi = npc.GetAiStateInfo(); if (npcAi.CommandQueue.Count <= 0) { int curState = npcAi.CurState; if (curState > (int)AiStateId.Invalid && curState < (int)AiStateId.MaxNum) { NpcAiStateHandler handler; if (m_Handlers.TryGetValue(curState, out handler)) { if (null != handler) { handler(npc, aiCmdDispatcher, deltaTime); } } else { LogSystem.Error("Illegal ai state: " + curState + " npc:" + npc.GetId()); } } else { OnStateLogicInit(npc, aiCmdDispatcher, deltaTime); ChangeToState(npc, (int)AiStateId.Idle); } } ExecuteCommandQueue(npc, deltaTime); } }
private void OnNpcFace(NpcInfo npc, float faceDirection) { npc.GetMovementStateInfo().SetWantFaceDir(faceDirection); ControlSystemOperation.AdjustCharacterFaceDir(npc.GetId(), faceDirection); }
private void OnNpcAddImpact(NpcInfo npc, int impactId) { ImpactSystem.Instance.SendImpactToCharacter(npc, impactId, npc.GetId(), -1, -1, npc.GetMovementStateInfo().GetPosition3D(), npc.GetMovementStateInfo().GetFaceDir()); }
private void SummonPartner(int key_code, int what) { RoleInfo roleself = LobbyClient.Instance.CurrentRole; if (null == roleself) { return; } UserInfo playerself = WorldSystem.Instance.GetPlayerSelf(); if (null == playerself) { return; } /// if ((int)Keyboard.Event.Up == what) { // summonpartner PartnerInfo partnerInfo = roleself.PartnerStateInfo.GetActivePartner(); if (null != partnerInfo) { Data_Unit data = new Data_Unit(); data.m_Id = -1; data.m_LinkId = partnerInfo.LinkId; data.m_CampId = playerself.GetCampId(); data.m_Pos = playerself.GetMovementStateInfo().GetPosition3D(); data.m_RotAngle = 0; data.m_AiLogic = partnerInfo.GetAiLogic(); data.m_AiParam[0] = ""; data.m_AiParam[1] = ""; data.m_AiParam[2] = partnerInfo.GetAiParam().ToString(); data.m_IsEnable = true; NpcInfo npc = WorldSystem.Instance.NpcManager.AddNpc(data); if (null != npc) { AppendAttributeConfig aac = AppendAttributeConfigProvider.Instance.GetDataById(partnerInfo.GetAppendAttrConfigId()); float inheritAttackAttrPercent = partnerInfo.GetInheritAttackAttrPercent(); float inheritDefenceAttrPercent = partnerInfo.GetInheritDefenceAttrPercent(); if (null != aac) { // attack npc.GetBaseProperty().SetAttackBase(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().AttackBase *inheritAttackAttrPercent)); npc.GetBaseProperty().SetFireDamage(Operate_Type.OT_Absolute, playerself.GetActualProperty().FireDamage *inheritAttackAttrPercent); npc.GetBaseProperty().SetIceDamage(Operate_Type.OT_Absolute, playerself.GetActualProperty().IceDamage *inheritAttackAttrPercent); npc.GetBaseProperty().SetPoisonDamage(Operate_Type.OT_Absolute, playerself.GetActualProperty().PoisonDamage *inheritAttackAttrPercent); // defence npc.GetBaseProperty().SetHpMax(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().HpMax *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetEnergyMax(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().EnergyMax *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetADefenceBase(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().ADefenceBase *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetMDefenceBase(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().MDefenceBase *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetFireERD(Operate_Type.OT_Absolute, playerself.GetActualProperty().FireERD *inheritDefenceAttrPercent); npc.GetBaseProperty().SetIceERD(Operate_Type.OT_Absolute, playerself.GetActualProperty().IceERD *inheritDefenceAttrPercent); npc.GetBaseProperty().SetPoisonERD(Operate_Type.OT_Absolute, playerself.GetActualProperty().PoisonERD *inheritDefenceAttrPercent); // reset hp & energy npc.SetHp(Operate_Type.OT_Absolute, npc.GetActualProperty().HpMax); npc.SetEnergy(Operate_Type.OT_Absolute, npc.GetActualProperty().EnergyMax); } npc.SetAIEnable(true); npc.GetSkillStateInfo().RemoveAllSkill(); npc.BornTime = TimeUtility.GetServerMilliseconds(); List <int> skillList = partnerInfo.GetSkillList(); if (null != skillList) { for (int i = 0; i < skillList.Count; ++i) { SkillInfo skillInfo = new SkillInfo(skillList[i]); npc.GetSkillStateInfo().AddSkill(skillInfo); } } npc.SkillController = new SwordManSkillController(npc, GfxModule.Skill.GfxSkillSystem.Instance); npc.OwnerId = playerself.GetId(); playerself.PartnerId = npc.GetId(); EntityManager.Instance.CreateNpcView(npc.GetId()); if (partnerInfo.BornSkill > 0) { SkillInfo skillInfo = new SkillInfo(partnerInfo.BornSkill); npc.GetSkillStateInfo().AddSkill(skillInfo); npc.SkillController.ForceStartSkill(partnerInfo.BornSkill); } CharacterView view = EntityManager.Instance.GetCharacterViewById(npc.GetId()); if (null != view) { GfxSystem.SetLayer(view.Actor, "PhysicObj"); } } } } }
private void IdleHandler(NpcInfo npc, AiCommandDispatcher aiCmdDispatcher, long deltaTime) { if (!CanAiControl(npc)) { npc.GetMovementStateInfo().IsMoving = false; return; } NpcAiStateInfo info = npc.GetAiStateInfo(); info.Time += deltaTime; if (info.Time > 100) { info.Time = 0; if (GetAiData(npc).HasPatrolData) { npc.GetMovementStateInfo().IsMoving = false; ChangeToState(npc, (int)AiStateId.PatrolCommand); } else { CharacterInfo target = null; if (info.IsExternalTarget) { target = AiLogicUtility.GetSeeingLivingCharacterInfoHelper(npc, info.Target); if (null == target) { target = AiLogicUtility.GetNearstTargetHelper(npc, CharacterRelation.RELATION_ENEMY); if (null != target) { info.Target = target.GetId(); } } } else { target = AiLogicUtility.GetNearstTargetHelper(npc, CharacterRelation.RELATION_ENEMY); if (null != target) { info.Target = target.GetId(); } } // 写黑板 if (0 != info.HateTarget) { GetBlackBorad(npc).TargetId = info.HateTarget; } // 读黑板 int blackBoardTargetId = GetBlackBorad(npc).TargetId; if (0 != blackBoardTargetId) { target = AiLogicUtility.GetLivingCharacterInfoHelper(npc, blackBoardTargetId); info.Target = blackBoardTargetId; } if (null != target) { NotifyNpcTargetChange(npc); npc.GetMovementStateInfo().IsMoving = false; NotifyNpcMove(npc); GetBlackBorad(npc).AddReadyNpc(info.Target, npc.GetId()); info.Time = 0; ChangeToState(npc, (int)AiStateId.Pursuit); } } } }