1466: Add colors for authed players. Deprecates #1299 r=def- a=Learath2

Not sure if a snap item is the best idea for this but it should help with not sending the data more then needed and keeping it properly updated. The colors aren't great now but we can fix that easily.

![image](https://user-images.githubusercontent.com/490500/53680889-607bf780-3cf2-11e9-84a0-579160e9e170.png)


Co-authored-by: Learath <learath2@gmail.com>
This commit is contained in:
bors[bot] 2019-03-06 13:44:28 +00:00
commit 26dc51a272
10 changed files with 45 additions and 28 deletions

View file

@ -32,6 +32,14 @@ enum
SPEC_FREEVIEW=-1,
SPEC_FOLLOW=-2,
};
enum
{
AUTHED_NO=0,
AUTHED_HELPER,
AUTHED_MOD,
AUTHED_ADMIN,
};
'''
RawSource = '''
@ -194,6 +202,10 @@ Objects = [
NetIntAny("m_Test"),
]),
NetObjectEx("AuthInfo", "auth-info@netobj.ddnet.tw", [
NetIntRange("m_AuthLevel", "AUTHED_NO", "AUTHED_ADMIN"),
]),
## Events
NetEvent("Common", [

View file

@ -153,13 +153,7 @@ public:
virtual void SnapSetStaticsize(int ItemType, int Size) = 0;
enum
{
AUTHED_NO=0,
AUTHED_HELPER,
AUTHED_MOD,
AUTHED_ADMIN,
enum {
RCON_CID_SERV=-1,
RCON_CID_VOTE=-2,
};

View file

@ -176,7 +176,7 @@ int CServerBan::BanExt(T *pBanPool, const typename T::CDataType *pData, int Seco
if(Server()->m_aClients[i].m_State == CServer::CClient::STATE_EMPTY)
continue;
if(Server()->m_aClients[i].m_Authed != CServer::AUTHED_NO && NetMatch(pData, Server()->m_NetServer.ClientAddr(i)))
if(Server()->m_aClients[i].m_Authed != AUTHED_NO && NetMatch(pData, Server()->m_NetServer.ClientAddr(i)))
{
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban error (command denied)");
return -1;
@ -2125,7 +2125,7 @@ void CServer::StatusImpl(IConsole::IResult *pResult, void *pUser, bool DnsblBlac
char aAddrStr[NETADDR_MAXSTRSIZE];
CServer *pThis = static_cast<CServer *>(pUser);
bool CanSeeAddress = pThis->m_aClients[pResult->m_ClientID].m_Authed > CServer::AUTHED_MOD;
bool CanSeeAddress = pThis->m_aClients[pResult->m_ClientID].m_Authed > AUTHED_MOD;
for(int i = 0; i < MAX_CLIENTS; i++)
{
@ -2137,9 +2137,9 @@ void CServer::StatusImpl(IConsole::IResult *pResult, void *pUser, bool DnsblBlac
net_addr_str(pThis->m_NetServer.ClientAddr(i), aAddrStr, sizeof(aAddrStr), true);
if(pThis->m_aClients[i].m_State == CClient::STATE_INGAME)
{
const char *pAuthStr = pThis->m_aClients[i].m_Authed == CServer::AUTHED_ADMIN ? "(Admin)" :
pThis->m_aClients[i].m_Authed == CServer::AUTHED_MOD ? "(Mod)" :
pThis->m_aClients[i].m_Authed == CServer::AUTHED_HELPER ? "(Helper)" : "";
const char *pAuthStr = pThis->m_aClients[i].m_Authed == AUTHED_ADMIN ? "(Admin)" :
pThis->m_aClients[i].m_Authed == AUTHED_MOD ? "(Mod)" :
pThis->m_aClients[i].m_Authed == AUTHED_HELPER ? "(Helper)" : "";
char aAuthStr[128];
aAuthStr[0] = '\0';
if(pThis->m_aClients[i].m_AuthKey >= 0)
@ -2178,11 +2178,11 @@ static int GetAuthLevel(const char *pLevel)
{
int Level = -1;
if(!str_comp_nocase(pLevel, "admin"))
Level = CServer::AUTHED_ADMIN;
Level = AUTHED_ADMIN;
else if(!str_comp_nocase_num(pLevel, "mod", 3))
Level = CServer::AUTHED_MOD;
Level = AUTHED_MOD;
else if(!str_comp_nocase(pLevel, "helper"))
Level = CServer::AUTHED_HELPER;
Level = AUTHED_HELPER;
return Level;
}
@ -3052,7 +3052,7 @@ bool CServer::SetTimedOut(int ClientID, int OrigID)
return false;
}
DelClientCallback(OrigID, "Timeout Protection used", this);
m_aClients[ClientID].m_Authed = IServer::AUTHED_NO;
m_aClients[ClientID].m_Authed = AUTHED_NO;
return true;
}

View file

@ -444,13 +444,13 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
// name
TextRender()->SetCursor(&Cursor, NameOffset, y + (LineHeight - FontSize) / 2.f, FontSize, TEXTFLAG_RENDER|TEXTFLAG_STOP_AT_END);
if(m_pClient->m_aClients[pInfo->m_ClientID].m_AuthLevel)
TextRender()->TextColor(0.78f, 1.0f, 0.8f, 1.0f);
if(g_Config.m_ClShowIDs)
{
char aId[64] = "";
if (pInfo->m_ClientID >= 10)
str_format(aId, sizeof(aId),"%d: ", pInfo->m_ClientID);
else
str_format(aId, sizeof(aId),"%d: ", pInfo->m_ClientID);
str_format(aId, sizeof(aId),"%2d: ", pInfo->m_ClientID);
str_append(aId, m_pClient->m_aClients[pInfo->m_ClientID].m_aName,sizeof(aId));
Cursor.m_LineWidth = NameLength+8;
TextRender()->TextEx(&Cursor, aId, -1);
@ -460,6 +460,7 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
Cursor.m_LineWidth = NameLength;
TextRender()->TextEx(&Cursor, m_pClient->m_aClients[pInfo->m_ClientID].m_aName, -1);
}
TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
// clan
tw = TextRender()->TextWidth(0, FontSize, m_pClient->m_aClients[pInfo->m_ClientID].m_aClan, -1);

View file

@ -1187,6 +1187,8 @@ void CGameClient::OnNewSnapshot()
}
else if(Item.m_Type == NETOBJTYPE_FLAG)
m_Snap.m_paFlags[Item.m_ID%2] = (const CNetObj_Flag *)pData;
else if(Item.m_Type == NETOBJTYPE_AUTHINFO)
m_aClients[Item.m_ID].m_AuthLevel = ((const CNetObj_AuthInfo *)pData)->m_AuthLevel;
}
}

View file

@ -252,6 +252,8 @@ public:
bool m_Friend;
bool m_Foe;
int m_AuthLevel;
void UpdateRenderInfo();
void Reset();
@ -267,7 +269,7 @@ public:
int m_IngameTicks;
int m_JoinTick;
bool m_Active;
public:
CClientStats();
@ -283,7 +285,7 @@ public:
int m_FlagCaptures;
void Reset();
bool IsActive() const { return m_Active; }
void JoinGame(int Tick) { m_Active = true; m_JoinTick = Tick; };
void JoinSpec(int Tick) { m_Active = false; m_IngameTicks += Tick - m_JoinTick; };

View file

@ -1333,7 +1333,7 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID)
int Authed = Server()->GetAuthedState(ClientID);
if(Authed)
Console()->SetAccessLevel(Authed == IServer::AUTHED_ADMIN ? IConsole::ACCESS_LEVEL_ADMIN : Authed == IServer::AUTHED_MOD ? IConsole::ACCESS_LEVEL_MOD : IConsole::ACCESS_LEVEL_HELPER);
Console()->SetAccessLevel(Authed == AUTHED_ADMIN ? IConsole::ACCESS_LEVEL_ADMIN : Authed == AUTHED_MOD ? IConsole::ACCESS_LEVEL_MOD : IConsole::ACCESS_LEVEL_HELPER);
else
Console()->SetAccessLevel(IConsole::ACCESS_LEVEL_USER);
Console()->SetPrintOutputLevel(m_ChatPrintCBIndex, 0);
@ -1479,7 +1479,7 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID)
if(!pOption)
{
if(Authed != IServer::AUTHED_ADMIN) // allow admins to call any vote they want
if(Authed != AUTHED_ADMIN) // allow admins to call any vote they want
{
str_format(aChatmsg, sizeof(aChatmsg), "'%s' isn't an option on this server", pMsg->m_Value);
SendChatTarget(ClientID, aChatmsg);

View file

@ -698,7 +698,7 @@ void IGameController::Tick()
break;
}
#endif
if(GameServer()->m_apPlayers[i] && GameServer()->m_apPlayers[i]->GetTeam() != TEAM_SPECTATORS && Server()->GetAuthedState(i) == IServer::AUTHED_NO)
if(GameServer()->m_apPlayers[i] && GameServer()->m_apPlayers[i]->GetTeam() != TEAM_SPECTATORS && Server()->GetAuthedState(i) == AUTHED_NO)
{
if(Server()->Tick() > GameServer()->m_apPlayers[i]->m_LastActionTick+g_Config.m_SvInactiveKickTime*Server()->TickSpeed()*60)
{

View file

@ -328,6 +328,12 @@ void CPlayer::Snap(int SnappingClient)
pPlayerInfo->m_Score = -9999;
else
pPlayerInfo->m_Score = abs(m_Score) * -1;
CNetObj_AuthInfo *pAuthInfo = static_cast<CNetObj_AuthInfo *>(Server()->SnapNewItem(NETOBJTYPE_AUTHINFO, id, sizeof(CNetObj_AuthInfo)));
if(!pAuthInfo)
return;
pAuthInfo->m_AuthLevel = Server()->GetAuthedState(id);
}
void CPlayer::FakeSnap()

View file

@ -352,9 +352,9 @@ TEST_F(TeeHistorian, Auth)
0x01,
0x40, // FINISH
};
m_TH.RecordAuthInitial(0, IServer::AUTHED_ADMIN, "default_admin");
m_TH.RecordAuthLogin(1, IServer::AUTHED_MOD, "foobar");
m_TH.RecordAuthLogin(2, IServer::AUTHED_HELPER, "help");
m_TH.RecordAuthInitial(0, AUTHED_ADMIN, "default_admin");
m_TH.RecordAuthLogin(1, AUTHED_MOD, "foobar");
m_TH.RecordAuthLogin(2, AUTHED_HELPER, "help");
m_TH.RecordAuthLogout(1);
Finish();
Expect(EXPECTED, sizeof(EXPECTED));