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());
        }
Beispiel #4
0
 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());
                     }
                 }
             });
         }
     }
 }
Beispiel #5
0
 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());
             }
         }
     }
 }
Beispiel #6
0
 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();
     }
 }
Beispiel #7
0
 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);
         }
     }
 }
Beispiel #8
0
        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);
        }
Beispiel #9
0
 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);
     }
 }
Beispiel #10
0
 private void OnNpcFace(NpcInfo npc, float faceDirection)
 {
     npc.GetMovementStateInfo().SetWantFaceDir(faceDirection);
     ControlSystemOperation.AdjustCharacterFaceDir(npc.GetId(), faceDirection);
 }
Beispiel #11
0
 private void OnNpcAddImpact(NpcInfo npc, int impactId)
 {
     ImpactSystem.Instance.SendImpactToCharacter(npc, impactId, npc.GetId(), -1, -1, npc.GetMovementStateInfo().GetPosition3D(), npc.GetMovementStateInfo().GetFaceDir());
 }
Beispiel #12
0
        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);
                    }
                }
            }
        }