void CPlayer::Tick() { #ifdef CONF_DEBUG if(!g_Config.m_DbgDummies || m_ClientID < MAX_CLIENTS-g_Config.m_DbgDummies) #endif if(!Server()->ClientIngame(m_ClientID)) return; Server()->SetClientScore(m_ClientID, m_Score); // do latency stuff { IServer::CClientInfo Info; if(Server()->GetClientInfo(m_ClientID, &Info)) { m_Latency.m_Accum += Info.m_Latency; m_Latency.m_AccumMax = max(m_Latency.m_AccumMax, Info.m_Latency); m_Latency.m_AccumMin = min(m_Latency.m_AccumMin, Info.m_Latency); } // each second if(Server()->Tick()%Server()->TickSpeed() == 0) { m_Latency.m_Avg = m_Latency.m_Accum/Server()->TickSpeed(); m_Latency.m_Max = m_Latency.m_AccumMax; m_Latency.m_Min = m_Latency.m_AccumMin; m_Latency.m_Accum = 0; m_Latency.m_AccumMin = 1000; m_Latency.m_AccumMax = 0; } } if(!GameServer()->m_World.m_Paused) { if(!m_pCharacter && m_Team == TEAM_SPECTATORS && m_SpectatorID == SPEC_FREEVIEW) m_ViewPos -= vec2(clamp(m_ViewPos.x-m_LatestActivity.m_TargetX, -500.0f, 500.0f), clamp(m_ViewPos.y-m_LatestActivity.m_TargetY, -400.0f, 400.0f)); if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick()) m_Spawning = true; if(m_pCharacter) { if(m_pCharacter->IsAlive()) { m_ViewPos = m_pCharacter->m_Pos; } else { delete m_pCharacter; m_pCharacter = 0; } } else if(m_Spawning && m_RespawnTick <= Server()->Tick()) TryRespawn(); } else { ++m_RespawnTick; ++m_DieTick; ++m_ScoreStartTick; ++m_LastActionTick; ++m_TeamChangeTick; } }
void CPlayer::Tick() { #ifdef CONF_DEBUG if(!g_Config.m_DbgDummies || m_ClientID < MAX_CLIENTS-g_Config.m_DbgDummies) #endif if(!Server()->ClientIngame(m_ClientID)) return; if(m_KillMe != 0) { KillCharacter(m_KillMe); m_KillMe = 0; return; } if (m_ChatScore > 0) m_ChatScore--; if (m_ForcePauseTime > 0) m_ForcePauseTime--; Server()->SetClientScore(m_ClientID, m_Score); // do latency stuff { IServer::CClientInfo Info; if(Server()->GetClientInfo(m_ClientID, &Info)) { m_Latency.m_Accum += Info.m_Latency; m_Latency.m_AccumMax = max(m_Latency.m_AccumMax, Info.m_Latency); m_Latency.m_AccumMin = min(m_Latency.m_AccumMin, Info.m_Latency); } // each second if(Server()->Tick()%Server()->TickSpeed() == 0) { m_Latency.m_Avg = m_Latency.m_Accum/Server()->TickSpeed(); m_Latency.m_Max = m_Latency.m_AccumMax; m_Latency.m_Min = m_Latency.m_AccumMin; m_Latency.m_Accum = 0; m_Latency.m_AccumMin = 1000; m_Latency.m_AccumMax = 0; } } if(((CServer *)Server())->m_NetServer.ErrorString(m_ClientID)[0]) { char aBuf[512]; str_format(aBuf, sizeof(aBuf), "'%s' would have timed out, but can use timeout protection now", Server()->ClientName(m_ClientID)); GameServer()->SendChat(-1, CGameContext::CHAT_ALL, aBuf); ((CServer *)(Server()))->m_NetServer.ResetErrorString(m_ClientID); } if(!GameServer()->m_World.m_Paused) { if(!m_pCharacter && m_Team == TEAM_SPECTATORS && m_SpectatorID == SPEC_FREEVIEW) m_ViewPos -= vec2(clamp(m_ViewPos.x-m_LatestActivity.m_TargetX, -500.0f, 500.0f), clamp(m_ViewPos.y-m_LatestActivity.m_TargetY, -400.0f, 400.0f)); if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick()) m_Spawning = true; if(m_pCharacter) { if(m_pCharacter->IsAlive()) { if(m_Paused >= PAUSED_FORCE) { if(m_ForcePauseTime == 0) m_Paused = PAUSED_NONE; ProcessPause(); } else if(m_Paused == PAUSED_PAUSED && m_NextPauseTick < Server()->Tick()) { if((!m_pCharacter->GetWeaponGot(WEAPON_NINJA) || m_pCharacter->m_FreezeTime) && m_pCharacter->IsGrounded() && m_pCharacter->m_Pos == m_pCharacter->m_PrevPos) ProcessPause(); } else if(m_NextPauseTick < Server()->Tick()) { ProcessPause(); } if(!m_Paused) m_ViewPos = m_pCharacter->m_Pos; } else if(!m_pCharacter->IsPaused()) { delete m_pCharacter; m_pCharacter = 0; } } else if(m_Spawning && m_RespawnTick <= Server()->Tick()) TryRespawn(); } else { ++m_RespawnTick; ++m_DieTick; ++m_ScoreStartTick; ++m_LastActionTick; ++m_TeamChangeTick; } m_TuneZoneOld = m_TuneZone; // determine needed tunings with viewpos int CurrentIndex = GameServer()->Collision()->GetMapIndex(m_ViewPos); m_TuneZone = GameServer()->Collision()->IsTune(CurrentIndex); if (m_TuneZone != m_TuneZoneOld) // dont send tunigs all the time { GameServer()->SendTuningParams(m_ClientID, m_TuneZone); } }
void CPlayer::Tick() { if(!IsDummy() && !Server()->ClientIngame(m_ClientID)) return; Server()->SetClientScore(m_ClientID, m_Score); // do latency stuff { IServer::CClientInfo Info; if(Server()->GetClientInfo(m_ClientID, &Info)) { m_Latency.m_Accum += Info.m_Latency; m_Latency.m_AccumMax = max(m_Latency.m_AccumMax, Info.m_Latency); m_Latency.m_AccumMin = min(m_Latency.m_AccumMin, Info.m_Latency); } // each second if(Server()->Tick()%Server()->TickSpeed() == 0) { m_Latency.m_Avg = m_Latency.m_Accum/Server()->TickSpeed(); m_Latency.m_Max = m_Latency.m_AccumMax; m_Latency.m_Min = m_Latency.m_AccumMin; m_Latency.m_Accum = 0; m_Latency.m_AccumMin = 1000; m_Latency.m_AccumMax = 0; } } if(m_pCharacter && !m_pCharacter->IsAlive()) { delete m_pCharacter; m_pCharacter = 0; } if(!GameServer()->m_pController->IsGamePaused()) { if(!m_pCharacter && m_Team == TEAM_SPECTATORS && m_SpectatorID == SPEC_FREEVIEW) m_ViewPos -= vec2(clamp(m_ViewPos.x-m_LatestActivity.m_TargetX, -500.0f, 500.0f), clamp(m_ViewPos.y-m_LatestActivity.m_TargetY, -400.0f, 400.0f)); if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick() && !m_DeadSpecMode) Respawn(); if(m_pCharacter) { if(m_pCharacter->IsAlive()) m_ViewPos = m_pCharacter->m_Pos; } else if(m_Spawning && m_RespawnTick <= Server()->Tick()) TryRespawn(); if(!m_DeadSpecMode && m_LastActionTick != Server()->Tick()) ++m_InactivityTickCounter; } else { ++m_RespawnTick; ++m_DieTick; ++m_ScoreStartTick; ++m_LastActionTick; ++m_TeamChangeTick; } }
void CPlayer::Tick() { #ifdef CONF_DEBUG if(!g_Config.m_DbgDummies || m_ClientID < MAX_CLIENTS-g_Config.m_DbgDummies) #endif if(!Server()->ClientIngame(m_ClientID)) return; Server()->SetClientScore(m_ClientID, m_Score); //if (m_Team != TEAM_SPECTATORS) // m_WantedTeam = m_Team; // do latency stuff { IServer::CClientInfo Info; if(Server()->GetClientInfo(m_ClientID, &Info)) { m_Latency.m_Accum += Info.m_Latency; m_Latency.m_AccumMax = max(m_Latency.m_AccumMax, Info.m_Latency); m_Latency.m_AccumMin = min(m_Latency.m_AccumMin, Info.m_Latency); } // each second if(Server()->Tick()%Server()->TickSpeed() == 0) { m_Latency.m_Avg = m_Latency.m_Accum/Server()->TickSpeed(); m_Latency.m_Max = m_Latency.m_AccumMax; m_Latency.m_Min = m_Latency.m_AccumMin; m_Latency.m_Accum = 0; m_Latency.m_AccumMin = 1000; m_Latency.m_AccumMax = 0; } } if (m_ForceToSpectators) ForceToSpectators(); if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*1 <= Server()->Tick()) { m_Spectate = true; } else m_Spectate = false; if (m_IsBot) m_InterestPoints /= 1.025f; else m_InterestPoints /= 1.02f; /* if (m_InterestPoints > 0) m_InterestPoints--; else { //if (GetCharacter()) // m_InterestPoints = int(frandom()*10); } */ if(!GameServer()->m_World.m_Paused) { if(!m_pCharacter && m_Team == TEAM_SPECTATORS && m_SpectatorID == SPEC_FREEVIEW) m_ViewPos -= vec2(clamp(m_ViewPos.x-m_LatestActivity.m_TargetX, -500.0f, 500.0f), clamp(m_ViewPos.y-m_LatestActivity.m_TargetY, -400.0f, 400.0f)); //if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick()) if(!m_pCharacter) m_Spawning = true; if(m_pCharacter) { if(m_pCharacter->IsAlive()) { m_ViewPos = m_pCharacter->m_Pos; } else { delete m_pCharacter; m_pCharacter = 0; } } //else if(m_Spawning && m_RespawnTick <= Server()->Tick()) else if(m_Spawning && (m_RespawnTick <= Server()->Tick() || str_comp(g_Config.m_SvGametype, "cstt") == 0)) TryRespawn(); } else { ++m_RespawnTick; ++m_DieTick; ++m_ScoreStartTick; ++m_LastActionTick; ++m_TeamChangeTick; } }