Merge pull request #1072 from ChillerDragon/Broadcasts

Add broadcast importance (fixes #669)
This commit is contained in:
Dennis Felsing 2018-04-03 10:15:01 +02:00 committed by GitHub
commit 256845c824
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 3 deletions

View file

@ -1221,7 +1221,7 @@ void CCharacter::HandleBroadcast()
char aBuftime[64];
int IntTime = (int)((float)(Server()->Tick() - m_StartTime) / ((float)Server()->TickSpeed()));
str_format(aBuftime, sizeof(aBuftime), "%s%d:%s%d", ((IntTime/60) > 9)?"":"0", IntTime/60, ((IntTime%60) > 9)?"":"0", IntTime%60);
GameServer()->SendBroadcast(aBuftime, m_pPlayer->GetCID());
GameServer()->SendBroadcast(aBuftime, m_pPlayer->GetCID(), false);
m_CpLastBroadcast = m_CpActive;
m_LastBroadcast = Server()->Tick();
}

View file

@ -398,11 +398,36 @@ void CGameContext::SendWeaponPickup(int ClientID, int Weapon)
}
void CGameContext::SendBroadcast(const char *pText, int ClientID)
void CGameContext::SendBroadcast(const char *pText, int ClientID, bool IsImportant)
{
CNetMsg_Sv_Broadcast Msg;
Msg.m_pMessage = pText;
if(ClientID == -1)
{
dbg_assert(IsImportant, "broadcast messages to all players must be important");
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, ClientID);
for(int i = 0; i < MAX_CLIENTS; i++)
{
if(m_apPlayers[i])
{
m_apPlayers[i]->m_LastBroadcastImportance = true;
m_apPlayers[i]->m_LastBroadcast = Server()->Tick();
}
}
return;
}
if(!m_apPlayers[ClientID])
return;
if(!IsImportant && m_apPlayers[ClientID]->m_LastBroadcastImportance && m_apPlayers[ClientID]->m_LastBroadcast > Server()->Tick() - Server()->TickSpeed() * 10)
return;
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, ClientID);
m_apPlayers[ClientID]->m_LastBroadcast = Server()->Tick();
m_apPlayers[ClientID]->m_LastBroadcastImportance = IsImportant;
}
void CGameContext::StartVote(const char *pDesc, const char *pCommand, const char *pReason)

View file

@ -191,7 +191,7 @@ public:
void SendChat(int ClientID, int Team, const char *pText, int SpamProtectionClientID = -1);
void SendEmoticon(int ClientID, int Emoticon);
void SendWeaponPickup(int ClientID, int Weapon);
void SendBroadcast(const char *pText, int ClientID);
void SendBroadcast(const char *pText, int ClientID, bool IsImportant = true);
void List(int ClientID, const char* filter);

View file

@ -181,6 +181,8 @@ public:
void AfkVoteTimer(CNetObj_PlayerInput *NewTarget);
int64 m_LastPlaytime;
int64 m_LastEyeEmote;
int64 m_LastBroadcast;
bool m_LastBroadcastImportance;
int m_LastTarget_x;
int m_LastTarget_y;
CNetObj_PlayerInput m_LastTarget;