blob: 54e645b3bf8aa2197335e8247e4554bb4f50d77a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
#include <engine/shared/config.h>
#include <game/server/entities/character.h>
#include <game/server/player.h>
#include "tdm.h"
CGameControllerTDM::CGameControllerTDM(class CGameContext *pGameServer) : IGameController(pGameServer)
{
m_pGameType = "TDM";
m_GameFlags = GAMEFLAG_TEAMS;
}
int CGameControllerTDM::OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int Weapon)
{
IGameController::OnCharacterDeath(pVictim, pKiller, Weapon);
if(Weapon != WEAPON_GAME)
{
// do team scoring
if(pKiller == pVictim->GetPlayer() || pKiller->GetTeam() == pVictim->GetPlayer()->GetTeam())
m_aTeamscore[pKiller->GetTeam()&1]--; // klant arschel
else
m_aTeamscore[pKiller->GetTeam()&1]++; // good shit
}
pVictim->GetPlayer()->m_RespawnTick = max(pVictim->GetPlayer()->m_RespawnTick, Server()->Tick()+Server()->TickSpeed()*g_Config.m_SvRespawnDelayTDM);
return 0;
}
void CGameControllerTDM::Snap(int SnappingClient)
{
IGameController::Snap(SnappingClient);
CNetObj_GameData *pGameDataObj = (CNetObj_GameData *)Server()->SnapNewItem(NETOBJTYPE_GAMEDATA, 0, sizeof(CNetObj_GameData));
if(!pGameDataObj)
return;
pGameDataObj->m_TeamscoreRed = m_aTeamscore[TEAM_RED];
pGameDataObj->m_TeamscoreBlue = m_aTeamscore[TEAM_BLUE];
pGameDataObj->m_FlagCarrierRed = 0;
pGameDataObj->m_FlagCarrierBlue = 0;
}
void CGameControllerTDM::Tick()
{
DoTeamScoreWincheck();
IGameController::Tick();
}
|