Fix #662 (timer command displays the wrong state)

This commit is contained in:
necropotame 2017-03-15 11:11:01 +01:00
parent 7f407aa303
commit e4345307c1

View file

@ -1283,60 +1283,59 @@ void CGameContext::ConSetTimerType(IConsole::IResult *pResult, void *pUserData)
if (!pPlayer) if (!pPlayer)
return; return;
const char msg[3][128] = {"game/round timer.", "broadcast.", "both game/round timer and broadcast."}; if(pResult->NumArguments() > 0)
{
int OldType = pPlayer->m_TimerType;
if(str_comp_nocase(pResult->GetString(0), "gametimer") == 0)
{
if(pPlayer->m_ClientVersion >= VERSION_DDNET_GAMETICK)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_GAMETIMER;
else
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "timer", "gametimer is not supported by your client.");
}
else if(str_comp_nocase(pResult->GetString(0), "broadcast") == 0)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_BROADCAST;
else if(str_comp_nocase(pResult->GetString(0), "both") == 0)
{
if(pPlayer->m_ClientVersion >= VERSION_DDNET_GAMETICK)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_GAMETIMER_AND_BROADCAST;
else
{
pPlayer->m_TimerType = CPlayer::TIMERTYPE_BROADCAST;
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "timer", "gametimer is not supported by your client.");
}
}
else if(str_comp_nocase(pResult->GetString(0), "none") == 0)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_NONE;
else if(str_comp_nocase(pResult->GetString(0), "cycle") == 0)
{
if(pPlayer->m_ClientVersion >= VERSION_DDNET_GAMETICK)
{
if(pPlayer->m_TimerType < CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType++;
else if(pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_GAMETIMER;
}
else
{
if(pPlayer->m_TimerType < CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_NONE;
else if(pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_BROADCAST;
}
}
if((OldType == CPlayer::TIMERTYPE_BROADCAST || OldType == CPlayer::TIMERTYPE_GAMETIMER_AND_BROADCAST) && (pPlayer->m_TimerType == CPlayer::TIMERTYPE_GAMETIMER || pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE))
pSelf->SendBroadcast("", pResult->m_ClientID);
}
char aBuf[128]; char aBuf[128];
const char msg[3][128] = {"game/round timer.", "broadcast.", "both game/round timer and broadcast."};
if(pPlayer->m_TimerType <= CPlayer::TIMERTYPE_GAMETIMER_AND_BROADCAST && pPlayer->m_TimerType >= CPlayer::TIMERTYPE_GAMETIMER) if(pPlayer->m_TimerType <= CPlayer::TIMERTYPE_GAMETIMER_AND_BROADCAST && pPlayer->m_TimerType >= CPlayer::TIMERTYPE_GAMETIMER)
str_format(aBuf, sizeof(aBuf), "Timer is displayed in %s", msg[pPlayer->m_TimerType]); str_format(aBuf, sizeof(aBuf), "Timer is displayed in %s", msg[pPlayer->m_TimerType]);
else if(pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE) else if(pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE)
str_format(aBuf, sizeof(aBuf), "Timer isn't displayed."); str_format(aBuf, sizeof(aBuf), "Timer isn't displayed.");
int OldType = pPlayer->m_TimerType;
if(pResult->NumArguments() == 0) {
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD,"timer",aBuf);
return;
}
else if(str_comp_nocase(pResult->GetString(0), "gametimer") == 0)
{
if(pPlayer->m_ClientVersion >= VERSION_DDNET_GAMETICK)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_GAMETIMER;
else
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "timer", "gametimer is not supported by your client.");
}
else if(str_comp_nocase(pResult->GetString(0), "broadcast") == 0)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_BROADCAST;
else if(str_comp_nocase(pResult->GetString(0), "both") == 0)
{
if(pPlayer->m_ClientVersion >= VERSION_DDNET_GAMETICK)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_GAMETIMER_AND_BROADCAST;
else
{
pPlayer->m_TimerType = CPlayer::TIMERTYPE_BROADCAST;
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "timer", "gametimer is not supported by your client.");
}
}
else if(str_comp_nocase(pResult->GetString(0), "none") == 0)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_NONE;
else if(str_comp_nocase(pResult->GetString(0), "cycle") == 0)
{
if(pPlayer->m_ClientVersion >= VERSION_DDNET_GAMETICK)
{
if(pPlayer->m_TimerType < CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType++;
else if(pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_GAMETIMER;
}
else
{
if(pPlayer->m_TimerType < CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_NONE;
else if(pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE)
pPlayer->m_TimerType = CPlayer::TIMERTYPE_BROADCAST;
}
}
if((OldType == CPlayer::TIMERTYPE_BROADCAST || OldType == CPlayer::TIMERTYPE_GAMETIMER_AND_BROADCAST) && (pPlayer->m_TimerType == CPlayer::TIMERTYPE_GAMETIMER || pPlayer->m_TimerType == CPlayer::TIMERTYPE_NONE))
pSelf->SendBroadcast("", pResult->m_ClientID);
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "timer", aBuf); pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "timer", aBuf);
} }