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(); }
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; } } } }
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); }
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); } } } } }
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); } }
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); }
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; } } } }
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(); }
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); }
internal void Disconnect() { if (null != m_Connection && NetConnectionStatus.Connected == m_Connection.Status) { m_Connection.Disconnect("disconnect"); SetLastPingTime(TimeUtility.GetServerMilliseconds() - m_ConnectionOverTime); } }
internal void Tick() { long curTime = TimeUtility.GetServerMilliseconds(); if (curTime - m_LastTickTime > m_TickInterval) { m_LastTickTime = curTime; } }
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"); }
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); }
internal long GetElapsedDroppedTime() { long time = 0; if (IsTimeout()) { long current_time = TimeUtility.GetServerMilliseconds(); time = current_time - m_LastPingTime - m_ConnectionOverTime; } return(time); }
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); }
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); }); } }
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); }
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); }
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); }
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); }
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; } } } }
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()); } }
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); } }
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(); } }
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; } } } } } }
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); } }
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(); } } } } }
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); } }
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()); }
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); }