コード例 #1
0
        protected override void OnTick()
        {
            long curTime = TimeUtility.GetServerMilliseconds();

            if (m_LastLogTime + 60000 < curTime)
            {
                m_LastLogTime = curTime;

                DebugPoolCount((string msg) =>
                {
                    LogSys.Log(LOG_TYPE.INFO, "RoomProcessThread.ActionQueue {0}", msg);
                });
                int gameRoomCount = 0;
                int gameUserCount = 0;
                foreach (var room in m_LobbyInfo.Rooms.Values)
                {
                    if (room.CurrentState == RoomState.Game)
                    {
                        gameRoomCount++;
                        gameUserCount += room.UserCount;
                    }
                }
                LogSys.Log(LOG_TYPE.WARN, "Lobby Game Room Count:{0}, GameUserCount:{1}, MatchUserCount:{2}", gameRoomCount, gameUserCount, LobbyServer.Instance.MatchFormThread.MatchUserCount);
            }

            m_LobbyInfo.Tick();
        }
コード例 #2
0
        public override void Tick(CharacterInfo character, int impactId)
        {
            ImpactInfo impactInfo = character.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                if (impactInfo.m_IsActivated)
                {
                    if (TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + impactInfo.m_ImpactDuration)
                    {
                        if (impactInfo.ConfigData.ExtraParams.Count > 0)
                        {
                            int superArmorType = int.Parse(impactInfo.ConfigData.ExtraParams[0]);
                            if ((int)SuperArmorType.SUPER_ARMOR == superArmorType)
                            {
                                character.SuperArmor = false;
                            }
                            else if ((int)SuperArmorType.ULTRA_ARMOR == superArmorType)
                            {
                                character.UltraArmor = false;
                            }
                        }
                        else
                        {
                            character.SuperArmor = false;
                        }
                        impactInfo.m_IsActivated = false;
                    }
                }
            }
        }
コード例 #3
0
        public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOwnerId)
        {
            int        result     = 0;
            ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                DamageImmunityShieldInfo info = impactInfo.LogicDatas.GetData <DamageImmunityShieldInfo>();
                if (null != info)
                {
                    info.CountRemain -= 1;
                    info.LastHitTime  = TimeUtility.GetServerMilliseconds();
                    if (info.CountRemain > 0 && !obj.IsDead())
                    {
                        if (null != EventUpdateDamageImmunityShiled)
                        {
                            EventUpdateDamageImmunityShiled(obj, impactId);
                        }
                        if (null != EventImpactLogicDamage)
                        {
                            EventImpactLogicDamage(obj, senderId, 0, false, false, IsImpactDamageOrdinary(obj, impactId));
                        }
                    }
                    else
                    {
                        if (null != EventStopDamageImmunityShiled)
                        {
                            EventStopDamageImmunityShiled(obj, impactId);
                        }
                        result = hpDamage;
                    }
                }
            }
            return(result);
        }
コード例 #4
0
 public override void StartImpact(CharacterInfo obj, int impactId)
 {
     if (null != obj)
     {
         ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId);
         if (null != impactInfo)
         {
             if (impactInfo.ConfigData.ParamNum > 2)
             {
                 DamageImmunityShieldInfo info = impactInfo.LogicDatas.GetData <DamageImmunityShieldInfo>();
                 if (null == info)
                 {
                     info = new DamageImmunityShieldInfo();
                     impactInfo.LogicDatas.AddData <DamageImmunityShieldInfo>(info);
                 }
                 info.CountRemain     = int.Parse(impactInfo.ConfigData.ExtraParams[0]);
                 info.RefreshInterval = float.Parse(impactInfo.ConfigData.ExtraParams[1]);
                 info.EffectPath      = impactInfo.ConfigData.ExtraParams[2];
                 info.CountMax        = info.CountRemain;
                 info.LastHitTime     = TimeUtility.GetServerMilliseconds();
                 if (null != EventStartDamageImmunityShiled)
                 {
                     EventStartDamageImmunityShiled(obj, impactId);
                 }
             }
         }
     }
 }
コード例 #5
0
        internal void NotifyRequestDare(ulong userGuid, string targetNickname)
        {
            UserInfo user = LobbyServer.Instance.DataProcessScheduler.GetUserInfo(userGuid);

            if (null == user)
            {
                return;
            }
            ulong    targetGuid = LobbyServer.Instance.DataProcessScheduler.GetGuidByNickname(targetNickname);
            UserInfo target     = LobbyServer.Instance.DataProcessScheduler.GetUserInfo(targetGuid);

            if (null == target)
            {
                return;
            }
            long cur_time = TimeUtility.GetServerMilliseconds();

            if (cur_time - user.LastRequestDareTime > CHALLENGE_CD_MS)
            {
                user.LastRequestDareTime = TimeUtility.GetServerMilliseconds();
                JsonMessageWithGuid rdMsg = new JsonMessageWithGuid(JsonMessageID.RequestDare);
                rdMsg.m_Guid = targetGuid;
                ArkCrossEngineMessage.Msg_LC_RequestDare protoData = new ArkCrossEngineMessage.Msg_LC_RequestDare();
                protoData.m_ChallengerNickname = user.Nickname;
                rdMsg.m_ProtoData = protoData;
                JsonMessageDispatcher.SendDcoreMessage(target.NodeName, rdMsg);
            }
            else
            {
                NotifyRequestDareResult(userGuid, user.Nickname, GeneralOperationResult.LC_Failure_InCd);
            }
        }
コード例 #6
0
        internal void AllocLobbyRoom(ulong[] users, int type)
        {
            int  roomId = m_LobbyInfo.CreateAutoRoom(users, type);
            long time   = TimeUtility.GetServerMilliseconds();

            DataProcessScheduler dataProcess    = LobbyServer.Instance.DataProcessScheduler;
            JsonMessageWithGuid  matchResultMsg = new JsonMessageWithGuid(JsonMessageID.MatchResult);

            foreach (ulong user in users)
            {
                UserInfo info = dataProcess.GetUserInfo(user);
                if (info != null)
                {
                    info.LastNotifyMatchTime = time;
                    matchResultMsg.m_Guid    = user;
                    ArkCrossEngineMessage.Msg_LC_MatchResult protoData = new ArkCrossEngineMessage.Msg_LC_MatchResult();
                    protoData.m_Result         = (int)TeamOperateResult.OR_Succeed;
                    matchResultMsg.m_ProtoData = protoData;
                    JsonMessageDispatcher.SendDcoreMessage(info.NodeName, matchResultMsg);
                    ///
                    dataProcess.RecordCampaignAction(user, type);
                }
            }

            LogSys.Log(LOG_TYPE.DEBUG, "Alloc lobby room for {0} users, roomid {1} scene {2}", users.Length, roomId, type);
        }
コード例 #7
0
        public override void Tick(CharacterInfo character, int impactId)
        {
            ImpactInfo impactInfo = character.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                if (impactInfo.m_IsActivated)
                {
                    float damageDelayTime = float.Parse(impactInfo.ConfigData.ExtraParams[0]);
                    if (damageDelayTime > 0.01f && TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + damageDelayTime * 1000 && !impactInfo.m_HasEffectApplyed)
                    {
                        int curdamage = 0;
                        int damage    = int.Parse(impactInfo.ConfigData.ExtraParams[1]);
                        if (!character.IsHaveStateFlag(CharacterState_Type.CST_Invincible))
                        {
                            ApplyDamage(character, impactId, out curdamage);
                        }
                        impactInfo.m_HasEffectApplyed = true;
                        ApplyRage(character, impactInfo, curdamage);
                    }

                    if (TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + impactInfo.m_ImpactDuration)
                    {
                        impactInfo.m_IsActivated = false;
                    }
                }
            }
        }
コード例 #8
0
        protected override void OnTick()
        {
            long curTime = TimeUtility.GetServerMilliseconds();

            if (m_LastLogTime + 60000 < curTime)
            {
                m_LastLogTime = curTime;
                DebugPoolCount((string msg) =>
                {
                    LogSys.Log(LOG_TYPE.INFO, "ServerBridgeThread.ActionQueue {0}", msg);
                });
            }
            if (m_LastUnlockTime + c_UnlockCheckInterval < curTime)
            {
                m_LastUnlockTime = curTime;

                foreach (KeyValuePair <string, long> pair in m_KickedUsers)
                {
                    if (pair.Value < curTime)
                    {
                        m_UnlockUsers.Add(pair.Key);
                    }
                }
                foreach (string key in m_UnlockUsers)
                {
                    m_KickedUsers.Remove(key);
                }
                m_UnlockUsers.Clear();
            }

            m_BillingClient.Tick();
        }
コード例 #9
0
 public bool CheckHitCanRelease(GameObject castgo, int impactId)
 {
     if (castgo != null)
     {
         if (m_SkillInstance != null)
         {
             long now = TimeUtility.GetServerMilliseconds();
             m_SkillInstance.CustomDatas.AddData <GameObjectBox>(new GameObjectBox(castgo));
             if (m_IsFirstCheck || now - m_LastCheckTime >= m_CheckDelay)
             {
                 ImpactLogicData ild = SkillConfigProvider.Instance.impactLogicDataMgr.GetDataById(impactId);
                 if (ild != null)
                 {
                     if (ild.BreakParry)
                     {
                         if (m_MessageParryFalse != "")
                         {
                             m_SkillInstance.SendMessage(m_MessageParryFalse);
                         }
                     }
                     else
                     {
                         if (m_MessageParryTrue != "")
                         {
                             m_SkillInstance.SendMessage(m_MessageParryTrue);
                         }
                     }
                 }
                 m_LastCheckTime = now;
                 m_IsFirstCheck  = false;
             }
         }
     }
     return(!m_IsForbidDamage);
 }
コード例 #10
0
 internal void Disconnect()
 {
     if (null != m_Connection && NetConnectionStatus.Connected == m_Connection.Status)
     {
         m_Connection.Disconnect("disconnect");
         SetLastPingTime(TimeUtility.GetServerMilliseconds() - m_ConnectionOverTime);
     }
 }
コード例 #11
0
        internal void Tick()
        {
            long curTime = TimeUtility.GetServerMilliseconds();

            if (curTime - m_LastTickTime > m_TickInterval)
            {
                m_LastTickTime = curTime;
            }
        }
コード例 #12
0
 internal void Init()
 {
     m_LastTickTime   = TimeUtility.GetServerMilliseconds();
     m_SaveDBInterval = DataStoreConfig.PersistentInterval;
     //m_LargeSize = m_MaxAllowedPacket / 50;
     //m_MediumSize = m_MaxAllowedPacket / 600;
     //m_SmallSize = m_MaxAllowedPacket / 1000;
     LogSys.Log(LOG_TYPE.INFO, "PersistentSystem initialized");
 }
コード例 #13
0
        internal void SyncPlayerMoveStop(float x, float z)
        {
            ArkCrossEngineMessage.Msg_CRC_MoveStop builder = new ArkCrossEngineMessage.Msg_CRC_MoveStop();
            builder.send_time = TimeUtility.GetServerMilliseconds();
            Position pos = new Position();

            pos.x            = x;
            pos.z            = z;
            builder.position = pos;
            SendMessage(builder);
        }
コード例 #14
0
        internal long GetElapsedDroppedTime()
        {
            long time = 0;

            if (IsTimeout())
            {
                long current_time = TimeUtility.GetServerMilliseconds();
                time = current_time - m_LastPingTime - m_ConnectionOverTime;
            }
            return(time);
        }
コード例 #15
0
        internal void SyncPlayerSkill(int skillId, float x, float z, float dir)
        {
            Msg_CRC_Skill bd = new Msg_CRC_Skill();

            bd.skill_id       = skillId;
            bd.stand_pos      = new ArkCrossEngineMessage.Position();
            bd.stand_pos.x    = x;
            bd.stand_pos.z    = z;
            bd.face_direction = dir;
            bd.send_time      = TimeUtility.GetServerMilliseconds();
            SendMessage(bd);
        }
コード例 #16
0
        protected override void OnTick()
        {
            long curTime = TimeUtility.GetServerMilliseconds();

            if (m_LastLogTime + 60000 < curTime)
            {
                m_LastLogTime = curTime;
                DebugPoolCount((string msg) =>
                {
                    LogSys.Log(LOG_TYPE.INFO, "GmServerThread.ActionQueue {0}", msg);
                });
            }
        }
コード例 #17
0
        internal void SyncPlayerMoveStart(float x, float z, float dir)
        {
            ArkCrossEngineMessage.Msg_CRC_MoveStart builder = new ArkCrossEngineMessage.Msg_CRC_MoveStart();
            builder.send_time = TimeUtility.GetServerMilliseconds();
            builder.dir       = dir;
            Position pos = new Position();

            pos.x                   = x;
            pos.z                   = z;
            builder.position        = pos;
            builder.is_skill_moving = false;
            SendMessage(builder);
        }
コード例 #18
0
        internal bool IsTimeout()
        {
            long current_time = TimeUtility.GetServerMilliseconds();

            if (current_time <= m_EnterRoomTime + m_FirstEnterWaitTime)
            {
                return(false);
            }
            if (current_time - m_LastPingTime >= m_ConnectionOverTime)
            {
                return(true);
            }
            return(false);
        }
コード例 #19
0
        internal void SyncGfxMoveControlStart(int objId, float x, float z, int id, bool isSkill)
        {
            Msg_CRC_GfxControlMoveStart msg = new Msg_CRC_GfxControlMoveStart();

            msg.obj_id             = objId;
            msg.skill_or_impact_id = id;
            msg.is_skill           = isSkill;
            msg.cur_pos            = new ArkCrossEngineMessage.Position();
            msg.cur_pos.x          = x;
            msg.cur_pos.z          = z;
            msg.send_time          = TimeUtility.GetServerMilliseconds();

            SendMessage(msg);
        }
コード例 #20
0
        internal void SyncGfxMoveControlStart(CharacterInfo obj, int id, bool isSkill)
        {
            MovementStateInfo           msi = obj.GetMovementStateInfo();
            Msg_CRC_GfxControlMoveStart msg = new Msg_CRC_GfxControlMoveStart();

            msg.obj_id             = obj.GetId();
            msg.skill_or_impact_id = id;
            msg.is_skill           = isSkill;
            msg.cur_pos            = new ArkCrossEngineMessage.Position();
            msg.cur_pos.x          = msi.PositionX;
            msg.cur_pos.z          = msi.PositionZ;
            msg.send_time          = TimeUtility.GetServerMilliseconds();

            SendMessage(msg);
        }
コード例 #21
0
        public override void Tick(CharacterInfo character, int impactId)
        {
            ImpactInfo impactInfo = character.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (null != impactInfo)
            {
                if (impactInfo.m_IsActivated)
                {
                    if (TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + impactInfo.m_ImpactDuration)
                    {
                        impactInfo.m_IsActivated = false;
                    }
                }
            }
        }
コード例 #22
0
        private void SendRoomServerUpdateInfo()
        {
            long curTime = TimeUtility.GetServerMilliseconds();
            int  ts      = (int)(curTime - last_send_roominfo_time_);

            if (ts >= c_send_interval_ms)
            {
                last_send_roominfo_time_ = curTime;
                Msg_RL_RoomServerUpdateInfo.Builder msgBuilder = Msg_RL_RoomServerUpdateInfo.CreateBuilder();
                msgBuilder.SetServerName(room_server_name_);
                msgBuilder.SetIdleRoomNum(room_mgr_.GetIdleRoomCount());
                msgBuilder.SetUserNum(room_mgr_.GetUserCount());
                channel_.Send(msgBuilder.Build());
                LogSys.Log(LOG_TYPE.DEBUG, "send room info to Lobby, Name:{0} IdleRoomNum:{1} UserNum:{2}.", room_server_name_, room_mgr_.GetIdleRoomCount(), room_mgr_.GetUserCount());
            }
        }
コード例 #23
0
        internal void SyncPlayerMoveStop()
        {
            UserInfo userInfo = WorldSystem.Instance.GetPlayerSelf();

            if (null != userInfo)
            {
                MovementStateInfo msi = userInfo.GetMovementStateInfo();
                ArkCrossEngineMessage.Msg_CRC_MoveStop builder = new ArkCrossEngineMessage.Msg_CRC_MoveStop();
                builder.send_time = TimeUtility.GetServerMilliseconds();
                Position pos = new Position();
                pos.x            = msi.PositionX;
                pos.z            = msi.PositionZ;
                builder.position = pos;
                SendMessage(builder);
            }
        }
コード例 #24
0
        private void Tick()
        {
            long curTime = TimeUtility.GetServerMilliseconds();

            if (last_tick_time_ + c_tick_interval_ms < curTime)
            {
                last_tick_time_ = curTime;

                if (is_continue_register_)
                {
                    SendRegisterRoomServer();
                }
            }
            if (!is_continue_register_)
            {
                SendRoomServerUpdateInfo();
            }
        }
コード例 #25
0
        protected override void OnTick()
        {
            long curTime = TimeUtility.GetServerMilliseconds();

            if (m_LastLogTime + 60000 < curTime)
            {
                m_LastLogTime = curTime;
                DebugPoolCount((string msg) =>
                {
                    LogSys.Log(LOG_TYPE.INFO, "GmServerThread.ActionQueue {0}", msg);
                });
            }

            const int c_MaxIterationPerTick = 100;

            if (IsLobbyFull() || GetTotalQueueingCount() <= 0)
            {
                //大厅已经满或者没有排队的玩家,多休息1秒
                System.Threading.Thread.Sleep(1000);
            }
            else
            {
                DataProcessScheduler dataProcess = LobbyServer.Instance.DataProcessScheduler;
                for (int i = 0; i < c_MaxIterationPerTick; ++i)
                {
                    foreach (KeyValuePair <int, Queue <string> > pair in m_QueueingAccounts)
                    {
                        int            serverId = pair.Key;
                        Queue <string> queue    = pair.Value;
                        if (queue.Count > 0 && CanEnter(serverId))
                        {
                            string accountKey = queue.Dequeue();
                            IncEnterCount(serverId);
                            LoginInfo info;
                            if (m_QueueingInfos.TryRemove(accountKey, out info) && info.LoginServerId == serverId)
                            {
                                dataProcess.DispatchAction(dataProcess.DoAccountLoginWithoutQueueing, accountKey, info.AccountId, info.LoginServerId, info.ClientGameVersion, info.ClientLoginIp, info.UniqueIdentifier, info.System, info.ChannelId, info.NodeName);
                                ++i;
                            }
                        }
                    }
                }
            }
        }
コード例 #26
0
 protected override void OnTick()
 {
     try {
         long curTime = TimeUtility.GetServerMilliseconds();
         if (m_LastLogTime + 60000 < curTime)
         {
             m_LastLogTime = curTime;
             DebugPoolCount((string msg) => {
                 LogSys.Log(LOG_TYPE.INFO, "DataOperator.ActionQueue {0}", msg);
             });
             m_LoadActionQueue.DebugPoolCount((string msg) => {
                 LogSys.Log(LOG_TYPE.INFO, "DataOperator.LoadActionQueue {0}", msg);
             });
         }
         m_LoadActionQueue.HandleActions(1024);
     } catch (Exception ex) {
         LogSys.Log(LOG_TYPE.ERROR, "DataOperator ERROR:{0} \n StackTrace:{1}", ex.Message, ex.StackTrace);
     }
 }
コード例 #27
0
 private void OnImpactSkill(CharacterInfo entity, int skillId)
 {
     if (null != entity)
     {
         if (entity.SkillController != null)
         {
             SkillInfo skillInfo = entity.GetSkillStateInfo().GetSkillInfoById(skillId);
             if (null != skillInfo)
             {
                 long curTime = TimeUtility.GetServerMilliseconds();
                 if (!skillInfo.IsInCd(curTime / 1000.0f))
                 {
                     entity.SkillController.ForceStartSkill(skillId);
                     skillInfo.BeginCD();
                 }
             }
         }
     }
 }
コード例 #28
0
        internal void SyncPlayerMoveStart(float dir)
        {
            WorldSystem.Instance.IsAlreadyNotifyMeetObstacle = false;

            UserInfo userInfo = WorldSystem.Instance.GetPlayerSelf();

            if (null != userInfo)
            {
                MovementStateInfo msi = userInfo.GetMovementStateInfo();
                ArkCrossEngineMessage.Msg_CRC_MoveStart builder = new ArkCrossEngineMessage.Msg_CRC_MoveStart();
                builder.send_time = TimeUtility.GetServerMilliseconds();
                builder.dir       = dir;
                Position pos = new Position();
                pos.x                   = msi.PositionX;
                pos.z                   = msi.PositionZ;
                builder.position        = pos;
                builder.is_skill_moving = msi.IsSkillMoving;
                SendMessage(builder);
            }
        }
コード例 #29
0
        internal void SyncPlayerSkill(CharacterInfo entity,
                                      int skillId)
        {
            if (entity.IsHaveStateFlag(CharacterState_Type.CST_Sleep))
            {
                return;
            }
            Vector3       standPos = entity.GetMovementStateInfo().GetPosition3D();
            Msg_CRC_Skill bd       = new Msg_CRC_Skill();

            bd.skill_id       = skillId;
            bd.stand_pos      = new ArkCrossEngineMessage.Position();
            bd.stand_pos.x    = standPos.X;
            bd.stand_pos.z    = standPos.Z;
            bd.face_direction = entity.GetMovementStateInfo().GetFaceDir();
            bd.want_face_dir  = entity.GetMovementStateInfo().GetWantFaceDir();
            bd.send_time      = TimeUtility.GetServerMilliseconds();
            SendMessage(bd);

            //LogSystem.Debug("SyncPlayerSkill skill {0}, entity {1}, pos:{2}", skillId, entity.GetId(), entity.GetMovementStateInfo().GetPosition2D().ToString());
        }
コード例 #30
0
ファイル: MsgHandler.cs プロジェクト: myl2232/ArkCrossEngine
    internal static void Execute(object msg, RoomPeer peer)
    {
        Msg_Ping ping = msg as Msg_Ping;

        if (ping == null)
        {
            LogSys.Log(LOG_TYPE.DEBUG, "warning: convert to ping message failed!");
            return;
        }
        // LogSys.Log(LOG_TYPE.DEBUG, "got {0} ping msg send ping time = {1}",
        //                           peer.UserGuid, ping.SendPingTime);
        Msg_Pong pongBuilder = new Msg_Pong();
        long     curtime     = TimeUtility.GetServerMilliseconds();

        pongBuilder.send_ping_time = ping.send_ping_time;
        pongBuilder.send_pong_time = curtime;
        peer.SetLastPingTime(curtime);
        Msg_Pong msg_pong = pongBuilder;

        peer.SendMessage(msg_pong);
    }