mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-19 22:48:18 +00:00
fixed demo recording/playing, clientinfo for server dummies and wrong team colours in scoreboard
This commit is contained in:
parent
525825c215
commit
4333f832f7
|
@ -221,7 +221,7 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
|
||||||
{
|
{
|
||||||
// make sure that we render the correct team
|
// make sure that we render the correct team
|
||||||
const CGameClient::CPlayerInfoItem *pInfo = &m_pClient->m_Snap.m_aInfoByScore[i];
|
const CGameClient::CPlayerInfoItem *pInfo = &m_pClient->m_Snap.m_aInfoByScore[i];
|
||||||
if(!pInfo->m_pPlayerInfo || m_pClient->m_aClients[i].m_Team != Team || (!RenderDead && (pInfo->m_pPlayerInfo->m_PlayerFlags&PLAYERFLAG_DEAD)) ||
|
if(!pInfo->m_pPlayerInfo || m_pClient->m_aClients[pInfo->m_ClientID].m_Team != Team || (!RenderDead && (pInfo->m_pPlayerInfo->m_PlayerFlags&PLAYERFLAG_DEAD)) ||
|
||||||
(RenderDead && !(pInfo->m_pPlayerInfo->m_PlayerFlags&PLAYERFLAG_DEAD)))
|
(RenderDead && !(pInfo->m_pPlayerInfo->m_PlayerFlags&PLAYERFLAG_DEAD)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
|
||||||
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_GAME].m_Id);
|
Graphics()->TextureSet(g_pData->m_aImages[IMAGE_GAME].m_Id);
|
||||||
Graphics()->QuadsBegin();
|
Graphics()->QuadsBegin();
|
||||||
|
|
||||||
RenderTools()->SelectSprite(m_pClient->m_aClients[i].m_Team==TEAM_RED ? SPRITE_FLAG_BLUE : SPRITE_FLAG_RED, SPRITE_FLAG_FLIP_X);
|
RenderTools()->SelectSprite(m_pClient->m_aClients[pInfo->m_ClientID].m_Team==TEAM_RED ? SPRITE_FLAG_BLUE : SPRITE_FLAG_RED, SPRITE_FLAG_FLIP_X);
|
||||||
|
|
||||||
float Size = LineHeight;
|
float Size = LineHeight;
|
||||||
IGraphics::CQuadItem QuadItem(TeeOffset+0.0f, y-5.0f-Spacing/2.0f, Size/2.0f, Size);
|
IGraphics::CQuadItem QuadItem(TeeOffset+0.0f, y-5.0f-Spacing/2.0f, Size/2.0f, Size);
|
||||||
|
|
|
@ -334,8 +334,7 @@ void CGameClient::OnReset()
|
||||||
m_All.m_paComponents[i]->OnReset();
|
m_All.m_paComponents[i]->OnReset();
|
||||||
|
|
||||||
m_LocalClientID = -1;
|
m_LocalClientID = -1;
|
||||||
m_GameInfo.m_NumPlayers = 0;
|
mem_zero(&m_GameInfo, sizeof(m_GameInfo));
|
||||||
m_GameInfo.m_aTeamSize[TEAM_RED] = m_GameInfo.m_aTeamSize[TEAM_BLUE] = 0;
|
|
||||||
m_DemoSpecID = SPEC_FREEVIEW;
|
m_DemoSpecID = SPEC_FREEVIEW;
|
||||||
m_Tuning = CTuningParams();
|
m_Tuning = CTuningParams();
|
||||||
}
|
}
|
||||||
|
@ -468,8 +467,9 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(MsgId == NETMSGTYPE_SV_TUNEPARAMS)
|
else if(MsgId == NETMSGTYPE_SV_TUNEPARAMS && Client()->State() != IClient::STATE_DEMOPLAYBACK)
|
||||||
{
|
{
|
||||||
|
Client()->RecordGameMessage(false);
|
||||||
// unpack the new tuning
|
// unpack the new tuning
|
||||||
CTuningParams NewTuning;
|
CTuningParams NewTuning;
|
||||||
int *pParams = (int *)&NewTuning;
|
int *pParams = (int *)&NewTuning;
|
||||||
|
@ -484,7 +484,6 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
|
|
||||||
// apply new tuning
|
// apply new tuning
|
||||||
m_Tuning = NewTuning;
|
m_Tuning = NewTuning;
|
||||||
Client()->RecordGameMessage(false);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,10 +500,10 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
for(int i = 0; i < m_All.m_Num; i++)
|
for(int i = 0; i < m_All.m_Num; i++)
|
||||||
m_All.m_paComponents[i]->OnMessage(MsgId, pRawMsg);
|
m_All.m_paComponents[i]->OnMessage(MsgId, pRawMsg);
|
||||||
|
|
||||||
if(MsgId == NETMSGTYPE_SV_CLIENTINFO)
|
if(MsgId == NETMSGTYPE_SV_CLIENTINFO && Client()->State() != IClient::STATE_DEMOPLAYBACK)
|
||||||
{
|
{
|
||||||
CNetMsg_Sv_ClientInfo *pMsg = (CNetMsg_Sv_ClientInfo *)pRawMsg;
|
|
||||||
Client()->RecordGameMessage(false);
|
Client()->RecordGameMessage(false);
|
||||||
|
CNetMsg_Sv_ClientInfo *pMsg = (CNetMsg_Sv_ClientInfo *)pRawMsg;
|
||||||
|
|
||||||
if(pMsg->m_Local)
|
if(pMsg->m_Local)
|
||||||
{
|
{
|
||||||
|
@ -530,6 +529,7 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
char aBuf[128];
|
char aBuf[128];
|
||||||
str_format(aBuf, sizeof(aBuf), Localize("'%s' entered and joined the %s"), pMsg->m_pName, GetTeamName(pMsg->m_Team, m_GameInfo.m_GameFlags&GAMEFLAG_TEAMS));
|
str_format(aBuf, sizeof(aBuf), Localize("'%s' entered and joined the %s"), pMsg->m_pName, GetTeamName(pMsg->m_Team, m_GameInfo.m_GameFlags&GAMEFLAG_TEAMS));
|
||||||
m_pChat->AddLine(-1, 0, aBuf);
|
m_pChat->AddLine(-1, 0, aBuf);
|
||||||
|
//todo record msg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -555,8 +555,9 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
if(m_aClients[pMsg->m_ClientID].m_Team != TEAM_SPECTATORS)
|
if(m_aClients[pMsg->m_ClientID].m_Team != TEAM_SPECTATORS)
|
||||||
m_GameInfo.m_aTeamSize[m_aClients[pMsg->m_ClientID].m_Team]++;
|
m_GameInfo.m_aTeamSize[m_aClients[pMsg->m_ClientID].m_Team]++;
|
||||||
}
|
}
|
||||||
else if(MsgId == NETMSGTYPE_SV_CLIENTDROP)
|
else if(MsgId == NETMSGTYPE_SV_CLIENTDROP && Client()->State() != IClient::STATE_DEMOPLAYBACK)
|
||||||
{
|
{
|
||||||
|
Client()->RecordGameMessage(false);
|
||||||
CNetMsg_Sv_ClientDrop *pMsg = (CNetMsg_Sv_ClientDrop *)pRawMsg;
|
CNetMsg_Sv_ClientDrop *pMsg = (CNetMsg_Sv_ClientDrop *)pRawMsg;
|
||||||
|
|
||||||
if(m_LocalClientID == pMsg->m_ClientID || !m_aClients[pMsg->m_ClientID].m_Active)
|
if(m_LocalClientID == pMsg->m_ClientID || !m_aClients[pMsg->m_ClientID].m_Active)
|
||||||
|
@ -580,8 +581,9 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
|
|
||||||
m_aClients[pMsg->m_ClientID].Reset();
|
m_aClients[pMsg->m_ClientID].Reset();
|
||||||
}
|
}
|
||||||
else if(MsgId == NETMSGTYPE_SV_GAMEINFO)
|
else if(MsgId == NETMSGTYPE_SV_GAMEINFO && Client()->State() != IClient::STATE_DEMOPLAYBACK)
|
||||||
{
|
{
|
||||||
|
Client()->RecordGameMessage(false);
|
||||||
CNetMsg_Sv_GameInfo *pMsg = (CNetMsg_Sv_GameInfo *)pRawMsg;
|
CNetMsg_Sv_GameInfo *pMsg = (CNetMsg_Sv_GameInfo *)pRawMsg;
|
||||||
|
|
||||||
m_GameInfo.m_GameFlags = pMsg->m_GameFlags;
|
m_GameInfo.m_GameFlags = pMsg->m_GameFlags;
|
||||||
|
@ -589,11 +591,10 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
m_GameInfo.m_TimeLimit = pMsg->m_TimeLimit;
|
m_GameInfo.m_TimeLimit = pMsg->m_TimeLimit;
|
||||||
m_GameInfo.m_MatchNum = pMsg->m_MatchNum;
|
m_GameInfo.m_MatchNum = pMsg->m_MatchNum;
|
||||||
m_GameInfo.m_MatchCurrent = pMsg->m_MatchCurrent;
|
m_GameInfo.m_MatchCurrent = pMsg->m_MatchCurrent;
|
||||||
|
|
||||||
Client()->RecordGameMessage(false);
|
|
||||||
}
|
}
|
||||||
else if(MsgId == NETMSGTYPE_SV_TEAM)
|
else if(MsgId == NETMSGTYPE_SV_TEAM && Client()->State() != IClient::STATE_DEMOPLAYBACK)
|
||||||
{
|
{
|
||||||
|
Client()->RecordGameMessage(false);
|
||||||
CNetMsg_Sv_Team *pMsg = (CNetMsg_Sv_Team *)pRawMsg;
|
CNetMsg_Sv_Team *pMsg = (CNetMsg_Sv_Team *)pRawMsg;
|
||||||
// calculate team-balance
|
// calculate team-balance
|
||||||
if(m_aClients[pMsg->m_ClientID].m_Team != TEAM_SPECTATORS)
|
if(m_aClients[pMsg->m_ClientID].m_Team != TEAM_SPECTATORS)
|
||||||
|
@ -609,8 +610,6 @@ void CGameClient::OnMessage(int MsgId, CUnpacker *pUnpacker)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_aClients[pMsg->m_ClientID].UpdateRenderInfo(false);
|
m_aClients[pMsg->m_ClientID].UpdateRenderInfo(false);
|
||||||
|
|
||||||
Client()->RecordGameMessage(false);
|
|
||||||
}
|
}
|
||||||
else if(MsgId == NETMSGTYPE_SV_READYTOENTER)
|
else if(MsgId == NETMSGTYPE_SV_READYTOENTER)
|
||||||
{
|
{
|
||||||
|
@ -766,6 +765,7 @@ void CGameClient::OnNewSnapshot()
|
||||||
if(Client()->State() == IClient::STATE_DEMOPLAYBACK)
|
if(Client()->State() == IClient::STATE_DEMOPLAYBACK)
|
||||||
{
|
{
|
||||||
m_Tuning = StandardTuning;
|
m_Tuning = StandardTuning;
|
||||||
|
mem_zero(&m_GameInfo, sizeof(m_GameInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
// go trough all the items in the snapshot and gather the info we want
|
// go trough all the items in the snapshot and gather the info we want
|
||||||
|
@ -787,6 +787,7 @@ void CGameClient::OnNewSnapshot()
|
||||||
|
|
||||||
if(pInfo->m_Local)
|
if(pInfo->m_Local)
|
||||||
m_LocalClientID = ClientID;
|
m_LocalClientID = ClientID;
|
||||||
|
pClient->m_Active = true;
|
||||||
pClient->m_Team = pInfo->m_Team;
|
pClient->m_Team = pInfo->m_Team;
|
||||||
IntsToStr(pInfo->m_aName, 4, pClient->m_aName);
|
IntsToStr(pInfo->m_aName, 4, pClient->m_aName);
|
||||||
IntsToStr(pInfo->m_aClan, 3, pClient->m_aClan);
|
IntsToStr(pInfo->m_aClan, 3, pClient->m_aClan);
|
||||||
|
@ -799,7 +800,20 @@ void CGameClient::OnNewSnapshot()
|
||||||
pClient->m_aSkinPartColors[p] = pInfo->m_aSkinPartColors[p];
|
pClient->m_aSkinPartColors[p] = pInfo->m_aSkinPartColors[p];
|
||||||
}
|
}
|
||||||
|
|
||||||
pClient->UpdateRenderInfo(true);
|
m_GameInfo.m_NumPlayers++;
|
||||||
|
// calculate team-balance
|
||||||
|
if(pClient->m_Team != TEAM_SPECTATORS)
|
||||||
|
m_GameInfo.m_aTeamSize[pClient->m_Team]++;
|
||||||
|
}
|
||||||
|
else if(Item.m_Type == NETOBJTYPE_DE_GAMEINFO)
|
||||||
|
{
|
||||||
|
const CNetObj_De_GameInfo *pInfo = (const CNetObj_De_GameInfo *)pData;
|
||||||
|
|
||||||
|
m_GameInfo.m_GameFlags = pInfo->m_GameFlags;
|
||||||
|
m_GameInfo.m_ScoreLimit = pInfo->m_ScoreLimit;
|
||||||
|
m_GameInfo.m_TimeLimit = pInfo->m_TimeLimit;
|
||||||
|
m_GameInfo.m_MatchNum = pInfo->m_MatchNum;
|
||||||
|
m_GameInfo.m_MatchCurrent = pInfo->m_MatchCurrent;
|
||||||
}
|
}
|
||||||
else if(Item.m_Type == NETOBJTYPE_DE_TUNEPARAMS)
|
else if(Item.m_Type == NETOBJTYPE_DE_TUNEPARAMS)
|
||||||
{
|
{
|
||||||
|
@ -942,6 +956,15 @@ void CGameClient::OnNewSnapshot()
|
||||||
m_Snap.m_AliveCount[m_aClients[i].m_Team]++;
|
m_Snap.m_AliveCount[m_aClients[i].m_Team]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Client()->State() == IClient::STATE_DEMOPLAYBACK)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < MAX_CLIENTS; ++i)
|
||||||
|
{
|
||||||
|
if(m_aClients[i].m_Active)
|
||||||
|
m_aClients[i].UpdateRenderInfo(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CServerInfo CurrentServerInfo;
|
CServerInfo CurrentServerInfo;
|
||||||
Client()->GetServerInfo(&CurrentServerInfo);
|
Client()->GetServerInfo(&CurrentServerInfo);
|
||||||
if(CurrentServerInfo.m_aGameType[0] != '0')
|
if(CurrentServerInfo.m_aGameType[0] != '0')
|
||||||
|
@ -968,6 +991,8 @@ void CGameClient::OnDemoRecSnap()
|
||||||
if(!pClientInfo)
|
if(!pClientInfo)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
pClientInfo->m_Local = i==m_LocalClientID ? 1 : 0;
|
||||||
|
pClientInfo->m_Team = m_aClients[i].m_Team;
|
||||||
StrToInts(pClientInfo->m_aName, 4, m_aClients[i].m_aName);
|
StrToInts(pClientInfo->m_aName, 4, m_aClients[i].m_aName);
|
||||||
StrToInts(pClientInfo->m_aClan, 3, m_aClients[i].m_aClan);
|
StrToInts(pClientInfo->m_aClan, 3, m_aClients[i].m_aClan);
|
||||||
pClientInfo->m_Country = m_aClients[i].m_Country;
|
pClientInfo->m_Country = m_aClients[i].m_Country;
|
||||||
|
|
|
@ -588,10 +588,11 @@ void CGameContext::OnClientEnter(int ClientID)
|
||||||
|
|
||||||
for(int i = 0; i < MAX_CLIENTS; ++i)
|
for(int i = 0; i < MAX_CLIENTS; ++i)
|
||||||
{
|
{
|
||||||
if(i == ClientID || !m_apPlayers[i] || !Server()->ClientIngame(i))
|
if(i == ClientID || !m_apPlayers[i] || (!Server()->ClientIngame(i) && !m_apPlayers[i]->IsDummy()))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// new info for others
|
// new info for others
|
||||||
|
if(Server()->ClientIngame(i))
|
||||||
Server()->SendPackMsg(&NewClientInfoMsg, MSGFLAG_VITAL|MSGFLAG_NORECORD, i);
|
Server()->SendPackMsg(&NewClientInfoMsg, MSGFLAG_VITAL|MSGFLAG_NORECORD, i);
|
||||||
|
|
||||||
// existing infos for new player
|
// existing infos for new player
|
||||||
|
@ -650,7 +651,7 @@ void CGameContext::OnClientDrop(int ClientID, const char *pReason)
|
||||||
CNetMsg_Sv_ClientDrop Msg;
|
CNetMsg_Sv_ClientDrop Msg;
|
||||||
Msg.m_ClientID = ClientID;
|
Msg.m_ClientID = ClientID;
|
||||||
Msg.m_pReason = pReason;
|
Msg.m_pReason = pReason;
|
||||||
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, -1);
|
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL|MSGFLAG_NORECORD, -1);
|
||||||
|
|
||||||
m_VoteUpdate = true;
|
m_VoteUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue