Example #1
0
        private bool TryCastSkill(UserInfo user, CharacterInfo target, float powDis)
        {
            float dis      = (float)Math.Sqrt(powDis);
            int   category = GetCanCastSkillId(user, dis);

            if (-1 != category)
            {
                if (user.GetSkillStateInfo().IsSkillActivated())
                {
                    SkillInfo curSkill = user.GetSkillStateInfo().GetCurSkillInfo();
                    if (null != curSkill)
                    {
                        if (TimeUtility.GetLocalMilliseconds() - curSkill.StartTime > curSkill.ConfigData.LockInputTime)
                        {
                            user.SkillController.PushSkill((SkillCategory)category, target.GetMovementStateInfo().GetPosition3D());
                        }
                    }
                }
                else
                {
                    user.SkillController.PushSkill((SkillCategory)category, target.GetMovementStateInfo().GetPosition3D());
                }
                return(true);
            }
            return(false);
        }
        private void UpdateSkillCD(SkillNode node)
        {
            if (node == null)
            {
                return;
            }
            SkillNode head      = GetHead(node.Category);
            SkillInfo head_info = m_Owner.GetSkillStateInfo().GetSkillInfoById(head.SkillId);

            if (head.SkillId == node.SkillId)
            {
                head_info.BeginCD();
                if (node.IsAlreadyPressUp)
                {
                    head_info.CalcuteCastTime(TimeUtility.GetLocalMilliseconds() / 1000f, head_info.SkillId);
                }
            }
            else
            {
                SkillInfo node_info = m_Owner.GetSkillStateInfo().GetSkillInfoById(node.SkillId);
                if (node.IsAlreadyPressUp)
                {
                    head_info.AddCD(node_info.ConfigData.CoolDownTime);
                }
                else
                {
                    head_info.AddCD(node_info.ConfigData.CoolDownTime + node_info.ConfigData.CastTime);
                }
            }
        }
Example #3
0
 public void OnHit(long hit_count_id)
 {
     if (TimeUtility.GetLocalMilliseconds() < m_LastTriggerTime + TriggerCD)
     {
         return;
     }
     if (hit_count_id != m_LastHitCountId)
     {
         m_HitNum = 0;
     }
     if (m_HitNum == 0)
     {
         m_LastHitCountId = hit_count_id;
         m_HitNum++;
     }
     else if (hit_count_id == m_LastHitCountId)
     {
         m_HitNum++;
     }
     if (m_HitNum >= HitCount)
     {
         m_LastTriggerTime = TimeUtility.GetLocalMilliseconds();
         //LogSystem.Error("---hit add damage rate triggered hit_count_id={0}", hit_count_id);
     }
 }
Example #4
0
        private SkillNode AddNextBasicSkill(SkillCategory category)
        {
            float now = TimeUtility.GetLocalMilliseconds() / 1000.0f;

            if (m_CurSkillNode != null && m_CurSkillNode.Category == category)
            {
                if (m_CurSkillNode.NextSkillNode != null && !m_CurSkillNode.NextSkillNode.IsLocked &&
                    now < GetWaitInputTime(m_CurSkillNode))
                {
                    m_WaiteSkillBuffer.Add(m_CurSkillNode.NextSkillNode);
                    return(m_CurSkillNode.NextSkillNode);
                }
            }
            SkillNode firstNode = null;

            if (m_SkillCategoryDict.TryGetValue(category, out firstNode))
            {
                if (!firstNode.IsLocked)
                {
                    m_WaiteSkillBuffer.Add(firstNode);
                    return(firstNode);
                }
            }
            return(null);
        }
Example #5
0
        internal void Init(int id, int objId, float moveDir)
        {
            m_CurTotalTime = 0;
            m_Id           = id;
            m_LastTime     = TimeUtility.GetLocalMilliseconds();
            m_MoveDir      = moveDir;
            m_ObjId        = objId;
            CharacterInfo info = WorldSystem.Instance.GetCharacterById(m_ObjId);

            if (null != info)
            {
                float curMoveDir = info.GetMovementStateInfo().GetMoveDir();
                m_DeltaDir = ((moveDir + c_2PI) - curMoveDir) % c_2PI;
                if (m_DeltaDir > c_PI)
                {
                    m_DeltaDir -= c_2PI;
                    m_TotalTime = -m_DeltaDir * c_TimePerRadian;
                }
                else
                {
                    m_TotalTime = m_DeltaDir * c_TimePerRadian;
                }
            }
            else
            {
                m_TotalTime = 0;
                m_DeltaDir  = 0;
            }

            //GfxSystem.GfxLog("MoveDirController {0}, obj:{1}, moveDir:{2} deltaDir:{3} totalTime:{4} isTerminated:{5}", id, objId, moveDir, m_DeltaDir, m_TotalTime, m_IsTerminated);
        }
Example #6
0
 public bool IsTriggered()
 {
     if (TimeUtility.GetLocalMilliseconds() < m_LastTriggerTime + RemainTime)
     {
         return(true);
     }
     return(false);
 }
 private bool IsTimeOut(long kill_time)
 {
     if (kill_time + KillInterverl < TimeUtility.GetLocalMilliseconds())
     {
         return(true);
     }
     return(false);
 }
Example #8
0
        protected bool CanInput(SkillCategory next_category)
        {
            float now = TimeUtility.GetLocalMilliseconds() / 1000.0f;

            if (now < GetLockInputTime(m_CurSkillNode, next_category))
            {
                return(false);
            }
            return(true);
        }
Example #9
0
 public bool OnKill(long hit_count_id)
 {
     if (CanTrigger(hit_count_id))
     {
         IsTriggered       = true;
         TriggerHitCountId = hit_count_id;
         TriggerTime       = TimeUtility.GetLocalMilliseconds();
         return(true);
     }
     return(false);
 }
 public void AddKillCount(CharacterInfo character)
 {
     for (int i = KillsInfo.Count - 1; i >= 0; i--)
     {
         if (IsTimeOut(KillsInfo[i]))
         {
             KillsInfo.RemoveAt(i);
         }
     }
     KillsInfo.Add(TimeUtility.GetLocalMilliseconds());
 }
Example #11
0
            internal void Tick()
            {
#if !USE_DISK_LOG
                long curTime = TimeUtility.GetLocalMilliseconds();
                if (m_LastFlushTime + 10000 < curTime)
                {
                    m_LastFlushTime = curTime;

                    RequestFlush();
                }
#endif
            }
        public override bool IsSkillCanBreak(SkillNode node, int breaktype, out bool isinterrupt, out string skillmessage)
        {
            isinterrupt  = false;
            skillmessage = "";
            SkillInfo cur_skill = GetSkillInfoByNode(node);

            if (cur_skill == null)
            {
                return(true);
            }
            return(cur_skill.CanBreak(breaktype, TimeUtility.GetLocalMilliseconds(), out isinterrupt, out skillmessage));
        }
Example #13
0
        internal void Tick()
        {
            long time = TimeUtility.GetLocalMilliseconds();
            int  ct   = m_StoryLogicInfos.Count;

            for (int ix = ct - 1; ix >= 0; --ix)
            {
                ScriptInstanceInfo info = m_StoryLogicInfos[ix];
                info.m_StoryInstance.Tick(time);
                if (info.m_StoryInstance.IsTerminated)
                {
                    RecycleStorylInstance(info);
                    m_StoryLogicInfos.RemoveAt(ix);
                }
            }
        }
Example #14
0
 private void UpdateSkillNodeCD()
 {
     if (m_CurSkillNode != null && !m_CurSkillNode.IsCDChecked)
     {
         if (m_CurSkillNode.NextSkillNode == null)
         {
             BeginSkillCategoryCD(m_CurSkillNode.Category);
             m_CurSkillNode.IsCDChecked = true;
         }
         else if (GetWaitInputTime(m_CurSkillNode) < TimeUtility.GetLocalMilliseconds() / 1000.0f)
         {
             BeginSkillCategoryCD(m_CurSkillNode.Category);
             m_CurSkillNode.IsCDChecked = true;
         }
     }
 }
        public override float GetSkillCD(SkillNode node)
        {
            if (node == null)
            {
                return(0);
            }
            SkillNode head = GetHead(node.Category);

            if (head == null)
            {
                return(0);
            }
            SkillInfo head_info = m_Owner.GetSkillStateInfo().GetSkillInfoById(head.SkillId);

            return(head_info.GetCD(TimeUtility.GetLocalMilliseconds() / 1000.0f));
        }
        public override bool IsSkillInCD(SkillNode node)
        {
            if (node == null)
            {
                return(false);
            }
            SkillNode head = GetHead(node.Category);

            if (node.SkillId != head.SkillId)
            {
                return(false);
            }
            SkillInfo head_info = m_Owner.GetSkillStateInfo().GetSkillInfoById(head.SkillId);

            return(head_info.IsInCd(TimeUtility.GetLocalMilliseconds() / 1000.0f));
        }
Example #17
0
        protected override void OnTick()
        {
            //这里是在逻辑线程执行的tick,渲染线程的在GameControler.cs:TickGame里。
            try
            {
                TimeUtility.SampleClientTick();

                long curTime = TimeUtility.GetLocalMilliseconds();
                if (m_LastLogTime + 10000 < curTime)
                {
                    m_LastLogTime = curTime;
#if DEBUG
                    if (WorldSystem.Instance.IsPvpScene() || WorldSystem.Instance.IsMultiPveScene())
                    {
                        GfxSystem.GfxLog("AverageRoundtripTime:{0}", TimeUtility.AverageRoundtripTime);
                    }

                    if (this.CurActionNum > 10)
                    {
                        GfxSystem.GfxLog("LogicThread.Tick actionNum {0}", this.CurActionNum);
                    }

                    DebugPoolCount((string msg) =>
                    {
                        GfxSystem.GfxLog("LogicActionQueue {0}", msg);
                    });
#endif
                    ClearPool(1024);
                }

                if (!GameControler.IsPaused)
                {
                    NetworkSystem.Instance.Tick();
                    LobbyNetworkSystem.Instance.Tick();
                    PlayerControl.Instance.Tick();
                    WorldSystem.Instance.Tick();
                    ScriptManager.Instance.Tick(false);
                }
                GameControler.LogicLoggerInstance.Tick();
            }
            catch (Exception ex)
            {
                LogSystem.Error("GameLogicThread.Tick throw Exception:{0}\n{1}", ex.Message, ex.StackTrace);
            }
        }
Example #18
0
        private void OnSkillStart(SkillNode node)
        {
            HideSkillTip(SkillCategory.kNone);
            m_LastSkillNode            = m_CurSkillNode;
            m_CurSkillNode             = node;
            m_CurSkillNode.StartTime   = TimeUtility.GetLocalMilliseconds() / 1000.0f;
            m_CurSkillNode.IsCDChecked = false;
            //m_CurSkillNode.IsAlreadyPressUp = false;

            m_WaiteSkillBuffer.RemoveAt(m_WaiteSkillBuffer.Count - 1);
            List <SkillNode> new_buffer_element = new List <SkillNode>();

            new_buffer_element.AddRange(m_WaiteSkillBuffer);
            m_WaiteSkillBuffer.Clear();

            if (m_CurSkillNode.NextSkillNode != null)
            {
                if (new_buffer_element.Count >= 1)
                {
                    SkillNode last = new_buffer_element[new_buffer_element.Count - 1];
                    if (m_CurSkillNode != null && last != null &&
                        last.Category == m_CurSkillNode.Category)
                    {
                        PushSkill(last.Category, Vector3.Zero);
                        new_buffer_element.Clear();
                    }
                }
            }

            if (m_LastSkillNode != null && m_LastSkillNode.Category != SkillCategory.kAttack &&
                m_LastSkillNode.Category != m_CurSkillNode.Category)
            {
                if (!m_LastSkillNode.IsCDChecked)
                {
                    BeginSkillCategoryCD(m_LastSkillNode.Category);
                    m_LastSkillNode.IsCDChecked = true;
                }
            }

            if (null != m_SkillStartHandler)
            {
                m_SkillStartHandler();
            }
        }
Example #19
0
        public override void Adjust()
        {
            CharacterInfo info = WorldSystem.Instance.GetCharacterById(m_ObjId);

            if (null != info)
            {
                float curTime = TimeUtility.GetLocalMilliseconds();
                float delta   = curTime - m_LastTime;
                m_LastTime      = curTime;
                m_CurTotalTime += delta;
                float moveDir = info.GetMovementStateInfo().GetMoveDir();
                if (m_CurTotalTime >= m_TotalTime || Math.Abs(moveDir - m_MoveDir) <= 0.1f)
                {
                    info.GetMovementStateInfo().SetMoveDir(m_MoveDir);

                    //GfxSystem.GfxLog("MoveDir adjust {0}", m_MoveDir);

                    m_IsTerminated = true;
                }
                else
                {
                    float offset = c_PI - (m_MoveDir + c_2PI - moveDir) % c_2PI;
                    if (offset * m_DeltaDir <= 0)
                    {
                        info.GetMovementStateInfo().SetMoveDir(m_MoveDir);

                        //GfxSystem.GfxLog("MoveDir adjust {0}", m_MoveDir);

                        m_IsTerminated = true;
                    }
                    else
                    {
                        float newMoveDir = (moveDir + c_2PI + delta * m_DeltaDir / m_TotalTime) % c_2PI;
                        info.GetMovementStateInfo().SetMoveDir(newMoveDir);

                        //GfxSystem.GfxLog("MoveDirController {0}, obj:{1}, moveDir:{2}->{3}, delta:{4} totalTime:{5} deltaDir:{6} targetDir:{7}", m_Id, m_ObjId, moveDir, newMoveDir, delta, m_TotalTime, m_DeltaDir, m_MoveDir);
                    }
                }
            }
            else
            {
                m_IsTerminated = true;
            }
        }
Example #20
0
 public void OnHit(long hit_count_id)
 {
     if (IsTriggered && TriggerTime + RemainTimeMS < TimeUtility.GetLocalMilliseconds())
     {
         Refresh();
         return;
     }
     if (IsTriggered && hit_count_id != TriggerHitCountId)
     {
         if (!IsAddCriticalHitRecord)
         {
             AddCriticalHitCountId  = hit_count_id;
             IsAddCriticalHitRecord = true;
         }
         else if (hit_count_id != AddCriticalHitCountId)
         {
             Refresh();
         }
     }
 }
Example #21
0
        private SkillNode AddQESkillNode(SkillCategory category)
        {
            float now = TimeUtility.GetLocalMilliseconds() / 1000.0f;

            if (m_CurSkillNode == null)
            {
                return(null);
            }
            SkillNode parent          = m_CurSkillNode;
            bool      isHaveWaiteNode = false;

            if (m_WaiteSkillBuffer.Count > 0)
            {
                parent          = m_WaiteSkillBuffer[m_WaiteSkillBuffer.Count - 1];
                isHaveWaiteNode = true;
            }
            if (parent == null)
            {
                return(null);
            }
            if (isHaveWaiteNode || now < GetWaitInputTime(m_CurSkillNode))
            {
                SkillNode target = null;
                if (category == SkillCategory.kSkillQ)
                {
                    target = parent.SkillQ;
                }
                if (category == SkillCategory.kSkillE)
                {
                    target = parent.SkillE;
                }
                if (target != null && !target.IsLocked)
                {
                    m_WaiteSkillBuffer.Add(target);
                    return(target);
                }
            }
            return(null);
        }
        public override bool StartSkill(SkillNode node)
        {
            if (WorldSystem.Instance.IsPvpScene() || WorldSystem.Instance.IsMultiPveScene())
            {
                if (m_Owner.GetId() == WorldSystem.Instance.PlayerSelfId || m_Owner.OwnerId == WorldSystem.Instance.PlayerSelfId)
                {
                    Network.NetworkSystem.Instance.SyncPlayerSkill(m_Owner, node.SkillId);
                }
            }
            else
            {
                if (!MakeSkillCost(node))
                {
                    return(false);
                }
            }
            m_Owner.ResetCross2StandRunTime();
            m_Owner.GetSkillStateInfo().SetCurSkillInfo(node.SkillId);
            SkillInfo cur_skill = m_Owner.GetSkillStateInfo().GetCurSkillInfo();

            if (null == cur_skill)
            {
                LogSystem.Error("----------SkillError: {0} set cur skill {1} failed! it's not exist", m_Owner.GetId(), node.SkillId);
                return(false);
            }
            cur_skill.IsSkillActivated = true;
            cur_skill.IsInterrupted    = false;
            cur_skill.StartTime        = TimeUtility.GetLocalMilliseconds() / 1000.0f;
            UpdateSkillCD(node);
            //LogSystem.Debug("---start skill at {0}--{1}", cur_skill.SkillId, cur_skill.StartTime);
            CharacterView view = EntityManager.Instance.GetCharacterViewById(m_Owner.GetId());

            if (view != null)
            {
                GfxSystem.QueueGfxAction(m_GfxSkillSystem.StartSkill, view.Actor, node.SkillId, m_Owner.GetMovementStateInfo().GetWantFaceDir());
            }
            SimulateStartSkill(m_Owner, node.SkillId);
            return(true);
        }
        public override bool ForceStartSkill(int skillid)
        {
            m_Owner.GetSkillStateInfo().SetCurSkillInfo(skillid);
            SkillInfo cur_skill = m_Owner.GetSkillStateInfo().GetCurSkillInfo();

            if (null == cur_skill)
            {
                LogSystem.Error("----------ForceStartSkillError: {0} set cur skill {1} failed! it's not exist", m_Owner.GetId(), skillid);
                return(false);
            }
            if (cur_skill.SkillId != skillid)
            {
                LogSystem.Debug("----------ForceStartSkillError: {0} set cur skill {1} failed! it's {2}", m_Owner.GetId(), skillid, cur_skill.SkillId);
                return(false);
            }
            if (null != cur_skill)
            {
                cur_skill.IsSkillActivated = true;
                cur_skill.IsInterrupted    = false;
                cur_skill.StartTime        = TimeUtility.GetLocalMilliseconds() / 1000.0f;
                //LogSystem.Debug("---force start skill at {0}--{1}", cur_skill.SkillId, cur_skill.StartTime);
                CharacterView view = EntityManager.Instance.GetCharacterViewById(m_Owner.GetId());
                if (view != null)
                {
                    GfxSystem.QueueGfxAction(m_GfxSkillSystem.StartSkill, view.Actor, skillid, m_Owner.GetMovementStateInfo().GetWantFaceDir());
                }
            }
            else
            {
                List <SkillInfo> skills = m_Owner.GetSkillStateInfo().GetAllSkill();
                LogSystem.Error("Can't find skill {0}, obj has {1} skills", skillid, skills.Count);
                foreach (SkillInfo info in skills)
                {
                    LogSystem.Error("\tskill {0}", info.SkillId);
                }
            }
            SimulateStartSkill(m_Owner, skillid);
            return(true);
        }
 public override bool BreakCurSkill(int breaktype, SkillCategory category)
 {
     if (category == m_CurSkillNode.Category)
     {
         bool result = StopSkill(m_CurSkillNode, breaktype);
         if (!result)
         {
             if (!m_CurSkillNode.IsAlreadyPressUp)
             {
                 m_CurSkillNode.IsAlreadyPressUp = true;
                 SkillNode head      = GetHead(m_CurSkillNode.Category);
                 SkillInfo skillInfo = m_Owner.GetSkillStateInfo().GetSkillInfoById(head.SkillId);
                 if (skillInfo != null)
                 {
                     skillInfo.CalcuteCastTime(TimeUtility.GetLocalMilliseconds() / 1000f, m_CurSkillNode.SkillId);
                 }
             }
             else
             {
                 SkillNode skillnode = m_WaiteSkillBuffer.Find(s => s.Category == category && s.IsAlreadyPressUp == false);
                 if (skillnode != null)
                 {
                     skillnode.IsAlreadyPressUp = true;
                 }
             }
         }
         return(result);
     }
     else
     {
         SkillNode skillnode = m_WaiteSkillBuffer.Find(s => s.Category == category && s.IsAlreadyPressUp == false);
         if (skillnode != null)
         {
             skillnode.IsAlreadyPressUp = true;
         }
     }
     return(false);
 }
Example #25
0
            internal void Log(string format, params object[] args)
            {
                if (m_LogStream == null)
                {
                    return;
                }
                string msg = string.Format(format, args);

#if USE_DISK_LOG
                if (m_LogStream != null)
                {
                    m_LogStream.WriteLine(msg);
                    m_LogStream.Flush();
                }
#else
                m_LogQueue.Enqueue(msg);
                if (!m_IsInRequestFlush && m_LogQueue.Count >= c_FlushCount)
                {
                    m_LastFlushTime = TimeUtility.GetLocalMilliseconds();

                    RequestFlush();
                }
#endif
            }
Example #26
0
        public void Add(string operationKey)
        {
            long startTime = TimeUtility.GetLocalMilliseconds();

            m_OperationTimeDict.AddOrUpdate(operationKey, startTime, startTime);
        }
Example #27
0
        public void OnGfxHitTarget(int id, int impactId, int targetId, int hitCount,
                                   int skillId, int duration, float x,
                                   float y, float z, float dir, long hit_count_id)
        {
            CharacterInfo sender               = WorldSystem.Instance.GetCharacterById(id);
            CharacterInfo target               = WorldSystem.Instance.GetCharacterById(targetId);
            UserInfo      playerSelf           = WorldSystem.Instance.GetPlayerSelf();
            bool          hitCountChanged      = false;
            bool          playerHitCountChange = false;
            long          curTime              = TimeUtility.GetLocalMilliseconds();

            UpdateHitTalent(sender, hit_count_id);
            // 攻击
            if (hitCount > 0)
            {
                CombatStatisticInfo senderCombatInfo = sender.GetCombatStatisticInfo();
                int last_count = senderCombatInfo.MultiHitCount;
                if (IsImpactHaveDamage(impactId))
                {
                    hitCountChanged = senderCombatInfo.UpdateMultiHitCount(hit_count_id, hitCount, curTime);
                }
                if (id == WorldSystem.Instance.PlayerSelfId && null != playerSelf)
                {
                    if (senderCombatInfo.MultiHitCount >= 1 && last_count != senderCombatInfo.MultiHitCount)
                    {
                        GfxSystem.PublishGfxEvent("ge_hitcount", "ui", senderCombatInfo.MultiHitCount);
                        playerHitCountChange = hitCountChanged;
                    }
                }
                CombatStatisticInfo targetCombatInfo = target.GetCombatStatisticInfo();
                targetCombatInfo.HitCount += hitCount;
                if (targetId == WorldSystem.Instance.PlayerSelfId && null != playerSelf)
                {
                    if (WorldSystem.Instance.IsELiteScene())
                    {
                        RoleInfo      roleInfo = LobbyClient.Instance.CurrentRole;
                        SceneResource curScene = WorldSystem.Instance.GetCurScene();
                        if (null != roleInfo && null != curScene && roleInfo.GetSceneInfo(WorldSystem.Instance.GetCurSceneId()) == 2)
                        { //当前在挑战3星通关
                            GfxSystem.PublishGfxEvent("ge_pve_fightinfo", "ui", 0, targetCombatInfo.HitCount, curScene.SceneConfig.m_CompletedHitCount, 0);
                        }
                        playerHitCountChange = true;
                    }
                }
            }
            if (playerHitCountChange && null != playerSelf && (WorldSystem.Instance.IsPvpScene() || WorldSystem.Instance.IsMultiPveScene()))
            {
                CombatStatisticInfo combatInfo = playerSelf.GetCombatStatisticInfo();
                ArkCrossEngineMessage.Msg_CR_HitCountChanged msg = new ArkCrossEngineMessage.Msg_CR_HitCountChanged();
                msg.max_multi_hit_count = combatInfo.MaxMultiHitCount;
                msg.hit_count           = combatInfo.HitCount;
                Network.NetworkSystem.Instance.SendMessage(msg);
            }
            if (null != sender && null != target)
            {
                int hit_count = 0;
                hit_count = sender.GetCombatStatisticInfo().MultiHitCount;
                OnGfxStartImpact(sender.GetId(), impactId, target.GetId(), skillId, duration, new Vector3(x, y, z), dir,
                                 hit_count);
            }
        }