mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Better broadcasting for spectators
This commit is contained in:
parent
fbe1cbe9e8
commit
d158267e92
|
@ -69,7 +69,7 @@ int CNetServer::Drop(int ClientID, const char *pReason)
|
||||||
|
|
||||||
int CNetServer::Update()
|
int CNetServer::Update()
|
||||||
{
|
{
|
||||||
int64 Now = time_get();
|
//int64 Now = time_get();
|
||||||
for(int i = 0; i < MaxClients(); i++)
|
for(int i = 0; i < MaxClients(); i++)
|
||||||
{
|
{
|
||||||
m_aSlots[i].m_Connection.Update();
|
m_aSlots[i].m_Connection.Update();
|
||||||
|
|
|
@ -1535,6 +1535,8 @@ void CCharacter::HandleTiles(int Index)
|
||||||
int z = GameServer()->Collision()->IsTeleport(MapIndex);
|
int z = GameServer()->Collision()->IsTeleport(MapIndex);
|
||||||
if(!g_Config.m_SvOldTeleportHook && !g_Config.m_SvOldTeleportWeapons && z && Controller->m_TeleOuts[z-1].size())
|
if(!g_Config.m_SvOldTeleportHook && !g_Config.m_SvOldTeleportWeapons && z && Controller->m_TeleOuts[z-1].size())
|
||||||
{
|
{
|
||||||
|
if (m_Super)
|
||||||
|
return;
|
||||||
m_Core.m_HookedPlayer = -1;
|
m_Core.m_HookedPlayer = -1;
|
||||||
m_Core.m_HookState = HOOK_RETRACTED;
|
m_Core.m_HookState = HOOK_RETRACTED;
|
||||||
m_Core.m_TriggeredEvents |= COREEVENT_HOOK_RETRACT;
|
m_Core.m_TriggeredEvents |= COREEVENT_HOOK_RETRACT;
|
||||||
|
@ -1545,8 +1547,10 @@ void CCharacter::HandleTiles(int Index)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int evilz = GameServer()->Collision()->IsEvilTeleport(MapIndex);
|
int evilz = GameServer()->Collision()->IsEvilTeleport(MapIndex);
|
||||||
if(evilz && !m_Super && Controller->m_TeleOuts[evilz-1].size())
|
if(evilz && Controller->m_TeleOuts[evilz-1].size())
|
||||||
{
|
{
|
||||||
|
if (m_Super)
|
||||||
|
return;
|
||||||
int Num = Controller->m_TeleOuts[evilz-1].size();
|
int Num = Controller->m_TeleOuts[evilz-1].size();
|
||||||
m_Core.m_Pos = Controller->m_TeleOuts[evilz-1][(!Num)?Num:rand() % Num];
|
m_Core.m_Pos = Controller->m_TeleOuts[evilz-1][(!Num)?Num:rand() % Num];
|
||||||
if (!g_Config.m_SvOldTeleportHook && !g_Config.m_SvOldTeleportWeapons)
|
if (!g_Config.m_SvOldTeleportHook && !g_Config.m_SvOldTeleportWeapons)
|
||||||
|
@ -1563,6 +1567,8 @@ void CCharacter::HandleTiles(int Index)
|
||||||
}
|
}
|
||||||
if(GameServer()->Collision()->IsCheckTeleport(MapIndex))
|
if(GameServer()->Collision()->IsCheckTeleport(MapIndex))
|
||||||
{
|
{
|
||||||
|
if (m_Super)
|
||||||
|
return;
|
||||||
// first check if there is a TeleCheckOut for the current recorded checkpoint, if not check previous checkpoints
|
// first check if there is a TeleCheckOut for the current recorded checkpoint, if not check previous checkpoints
|
||||||
for(int k=m_TeleCheckpoint-1; k >= 0; k--)
|
for(int k=m_TeleCheckpoint-1; k >= 0; k--)
|
||||||
{
|
{
|
||||||
|
|
|
@ -72,13 +72,24 @@ void CDoor::Snap(int SnappingClient)
|
||||||
|
|
||||||
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(
|
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(
|
||||||
NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
||||||
|
|
||||||
|
if (!pObj)
|
||||||
|
return;
|
||||||
|
|
||||||
pObj->m_X = (int) m_Pos.x;
|
pObj->m_X = (int) m_Pos.x;
|
||||||
pObj->m_Y = (int) m_Pos.y;
|
pObj->m_Y = (int) m_Pos.y;
|
||||||
|
|
||||||
CCharacter * Char = GameServer()->GetPlayerChar(SnappingClient);
|
CCharacter * Char = GameServer()->GetPlayerChar(SnappingClient);
|
||||||
int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11;
|
int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11;
|
||||||
|
|
||||||
|
if((GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1
|
||||||
|
|| GameServer()->m_apPlayers[SnappingClient]->m_Paused)
|
||||||
|
&& GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW)
|
||||||
|
Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID);
|
||||||
|
|
||||||
if (Char == 0)
|
if (Char == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (Char->IsAlive()
|
if (Char->IsAlive()
|
||||||
&& !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()]
|
&& !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()]
|
||||||
&& (!Tick))
|
&& (!Tick))
|
||||||
|
|
|
@ -248,6 +248,12 @@ void CDragger::Snap(int SnappingClient)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CCharacter * Char = GameServer()->GetPlayerChar(SnappingClient);
|
CCharacter * Char = GameServer()->GetPlayerChar(SnappingClient);
|
||||||
|
|
||||||
|
if((GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1
|
||||||
|
|| GameServer()->m_apPlayers[SnappingClient]->m_Paused)
|
||||||
|
&& GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW)
|
||||||
|
Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID);
|
||||||
|
|
||||||
int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11;
|
int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11;
|
||||||
if (Char && Char->IsAlive()
|
if (Char && Char->IsAlive()
|
||||||
&& (m_Layer == LAYER_SWITCH
|
&& (m_Layer == LAYER_SWITCH
|
||||||
|
|
|
@ -97,10 +97,20 @@ void CGun::Snap(int SnappingClient)
|
||||||
if(NetworkClipped(SnappingClient))
|
if(NetworkClipped(SnappingClient))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CCharacter * SnapChar = GameServer()->GetPlayerChar(SnappingClient);
|
CCharacter *Char = GameServer()->GetPlayerChar(SnappingClient);
|
||||||
|
|
||||||
|
if((GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1
|
||||||
|
|| GameServer()->m_apPlayers[SnappingClient]->m_Paused)
|
||||||
|
&& GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW)
|
||||||
|
Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID);
|
||||||
|
|
||||||
int Tick = (Server()->Tick()%Server()->TickSpeed())%11;
|
int Tick = (Server()->Tick()%Server()->TickSpeed())%11;
|
||||||
if (SnapChar && SnapChar->IsAlive() && (m_Layer == LAYER_SWITCH && !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[SnapChar->Team()]) && (!Tick)) return;
|
if (Char && Char->IsAlive() && (m_Layer == LAYER_SWITCH && !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()]) && (!Tick)) return;
|
||||||
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
||||||
|
|
||||||
|
if (!pObj)
|
||||||
|
return;
|
||||||
|
|
||||||
pObj->m_X = (int)m_Pos.x;
|
pObj->m_X = (int)m_Pos.x;
|
||||||
pObj->m_Y = (int)m_Pos.y;
|
pObj->m_Y = (int)m_Pos.y;
|
||||||
pObj->m_FromX = (int)m_Pos.x;
|
pObj->m_FromX = (int)m_Pos.x;
|
||||||
|
|
|
@ -108,28 +108,37 @@ void CLight::Snap(int SnappingClient)
|
||||||
&& NetworkClipped(SnappingClient, m_To))
|
&& NetworkClipped(SnappingClient, m_To))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CCharacter * pSnappingCharacter = GameServer()->GetPlayerChar(
|
CCharacter *Char = GameServer()->GetPlayerChar(SnappingClient);
|
||||||
SnappingClient);
|
|
||||||
|
if((GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1
|
||||||
|
|| GameServer()->m_apPlayers[SnappingClient]->m_Paused)
|
||||||
|
&& GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW)
|
||||||
|
Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID);
|
||||||
|
|
||||||
int Tick = (Server()->Tick() % Server()->TickSpeed()) % 6;
|
int Tick = (Server()->Tick() % Server()->TickSpeed()) % 6;
|
||||||
|
|
||||||
if (pSnappingCharacter && pSnappingCharacter->IsAlive()
|
if (Char && Char->IsAlive()
|
||||||
&& m_Layer == LAYER_SWITCH
|
&& m_Layer == LAYER_SWITCH
|
||||||
&& !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[pSnappingCharacter->Team()]
|
&& !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()]
|
||||||
&& (Tick))
|
&& (Tick))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(
|
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(
|
||||||
NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
||||||
|
|
||||||
|
if (!pObj)
|
||||||
|
return;
|
||||||
|
|
||||||
pObj->m_X = (int) m_Pos.x;
|
pObj->m_X = (int) m_Pos.x;
|
||||||
pObj->m_Y = (int) m_Pos.y;
|
pObj->m_Y = (int) m_Pos.y;
|
||||||
|
|
||||||
if (pSnappingCharacter && pSnappingCharacter->Team() == TEAM_SUPER)
|
if (Char && Char->Team() == TEAM_SUPER)
|
||||||
{
|
{
|
||||||
pObj->m_FromX = (int) m_Pos.x;
|
pObj->m_FromX = (int) m_Pos.x;
|
||||||
pObj->m_FromY = (int) m_Pos.y;
|
pObj->m_FromY = (int) m_Pos.y;
|
||||||
}
|
}
|
||||||
else if (pSnappingCharacter && m_Layer == LAYER_SWITCH
|
else if (Char && m_Layer == LAYER_SWITCH
|
||||||
&& GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[pSnappingCharacter->Team()])
|
&& GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()])
|
||||||
{
|
{
|
||||||
pObj->m_FromX = (int) m_To.x;
|
pObj->m_FromX = (int) m_To.x;
|
||||||
pObj->m_FromY = (int) m_To.y;
|
pObj->m_FromY = (int) m_To.y;
|
||||||
|
|
|
@ -150,11 +150,17 @@ void CPickup::Snap(int SnappingClient)
|
||||||
/*if(m_SpawnTick != -1 || NetworkClipped(SnappingClient))
|
/*if(m_SpawnTick != -1 || NetworkClipped(SnappingClient))
|
||||||
return;*/
|
return;*/
|
||||||
|
|
||||||
CCharacter * SnapChar = GameServer()->GetPlayerChar(SnappingClient);
|
CCharacter *Char = GameServer()->GetPlayerChar(SnappingClient);
|
||||||
|
|
||||||
|
if((GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1
|
||||||
|
|| GameServer()->m_apPlayers[SnappingClient]->m_Paused)
|
||||||
|
&& GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW)
|
||||||
|
Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID);
|
||||||
|
|
||||||
int Tick = (Server()->Tick()%Server()->TickSpeed())%11;
|
int Tick = (Server()->Tick()%Server()->TickSpeed())%11;
|
||||||
if (SnapChar && SnapChar->IsAlive() &&
|
if (Char && Char->IsAlive() &&
|
||||||
(m_Layer == LAYER_SWITCH &&
|
(m_Layer == LAYER_SWITCH &&
|
||||||
!GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[SnapChar->Team()])
|
!GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()])
|
||||||
&& (!Tick))
|
&& (!Tick))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,10 @@ void CPlasma::Snap(int SnappingClient)
|
||||||
|
|
||||||
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(
|
CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(
|
||||||
NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));
|
||||||
|
|
||||||
|
if(!pObj)
|
||||||
|
return;
|
||||||
|
|
||||||
pObj->m_X = (int) m_Pos.x;
|
pObj->m_X = (int) m_Pos.x;
|
||||||
pObj->m_Y = (int) m_Pos.y;
|
pObj->m_Y = (int) m_Pos.y;
|
||||||
pObj->m_FromX = (int) m_Pos.x;
|
pObj->m_FromX = (int) m_Pos.x;
|
||||||
|
|
Loading…
Reference in a new issue