about summary refs log tree commit diff
path: root/src/game/server
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-12 21:41:16 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-12 21:41:16 +0000
commit123c5b5b9962f4af04ae2a0ca72fec668a1bea1e (patch)
tree77aa460967d62c22df18a0fe56486f1fcef6c9ed /src/game/server
parent1d6668583a23b45724e9b107604c0dbfae433f10 (diff)
downloadzcatch-123c5b5b9962f4af04ae2a0ca72fec668a1bea1e.tar.gz
zcatch-123c5b5b9962f4af04ae2a0ca72fec668a1bea1e.zip
introduced 3 special pseudo weapons. game, self and world to make a difference on how you got killed
Diffstat (limited to 'src/game/server')
-rw-r--r--src/game/server/entities/character.cpp4
-rw-r--r--src/game/server/entities/character.hpp7
-rw-r--r--src/game/server/gamemodes/tdm.cpp14
-rw-r--r--src/game/server/hooks.cpp2
-rw-r--r--src/game/server/player.cpp8
-rw-r--r--src/game/server/player.hpp2
6 files changed, 25 insertions, 12 deletions
diff --git a/src/game/server/entities/character.cpp b/src/game/server/entities/character.cpp
index 479b1243..3bbe8670 100644
--- a/src/game/server/entities/character.cpp
+++ b/src/game/server/entities/character.cpp
@@ -550,7 +550,9 @@ void CHARACTER::tick()
 			col_get((int)(pos.x+phys_size/2), (int)(pos.y+phys_size/2))&COLFLAG_DEATH ||
 			col_get((int)(pos.x-phys_size/2), (int)(pos.y-phys_size/2))&COLFLAG_DEATH ||
 			col_get((int)(pos.x-phys_size/2), (int)(pos.y+phys_size/2))&COLFLAG_DEATH)
-		die(player->client_id, -1);
+	{
+		die(player->client_id, WEAPON_WORLD);
+	}
 
 	// handle weapons
 	handle_weapons();
diff --git a/src/game/server/entities/character.hpp b/src/game/server/entities/character.hpp
index bfb9d8c2..bd2f7afe 100644
--- a/src/game/server/entities/character.hpp
+++ b/src/game/server/entities/character.hpp
@@ -9,6 +9,13 @@
 
 #include <game/gamecore.hpp>
 
+enum
+{
+	WEAPON_GAME = -3, // team switching etc
+	WEAPON_SELF = -2, // console kill command
+	WEAPON_WORLD = -1, // death tiles etc
+};
+
 class CHARACTER : public ENTITY
 {
 	MACRO_ALLOC_POOL_ID()
diff --git a/src/game/server/gamemodes/tdm.cpp b/src/game/server/gamemodes/tdm.cpp
index e9aa0cdd..72605000 100644
--- a/src/game/server/gamemodes/tdm.cpp
+++ b/src/game/server/gamemodes/tdm.cpp
@@ -14,11 +14,15 @@ int GAMECONTROLLER_TDM::on_character_death(class CHARACTER *victim, class PLAYER
 {
 	GAMECONTROLLER::on_character_death(victim, killer, weapon);
 	
-	// do team scoring
-	if(killer == victim->player || killer->team == victim->player->team)
-		teamscore[killer->team&1]--; // klant arschel
-	else
-		teamscore[killer->team&1]++; // good shit
+	
+	if(weapon != WEAPON_GAME)
+	{
+		// do team scoring
+		if(killer == victim->player || killer->team == victim->player->team)
+			teamscore[killer->team&1]--; // klant arschel
+		else
+			teamscore[killer->team&1]++; // good shit
+	}
 		
 	return 0;
 }
diff --git a/src/game/server/hooks.cpp b/src/game/server/hooks.cpp
index 93ce3ae0..d557f99f 100644
--- a/src/game/server/hooks.cpp
+++ b/src/game/server/hooks.cpp
@@ -389,7 +389,7 @@ void mods_message(int msgtype, int client_id)
 			return;
 		
 		p->last_kill = time_get();
-		p->kill_character(); //(client_id, -1);
+		p->kill_character(WEAPON_SELF);
 		p->respawn_tick = server_tick()+server_tickspeed()*3;
 	}
 }
diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp
index 66953858..a0a2b051 100644
--- a/src/game/server/player.cpp
+++ b/src/game/server/player.cpp
@@ -88,7 +88,7 @@ void PLAYER::snap(int snapping_client)
 
 void PLAYER::on_disconnect()
 {
-	kill_character();
+	kill_character(WEAPON_GAME);
 	
 	//game.controller->on_player_death(&game.players[client_id], 0, -1);
 		
@@ -126,12 +126,12 @@ CHARACTER *PLAYER::get_character()
 	return 0;
 }
 
-void PLAYER::kill_character()
+void PLAYER::kill_character(int weapon)
 {
 	//CHARACTER *chr = get_character();
 	if(character)
 	{
-		character->die(client_id, -1);
+		character->die(client_id, weapon);
 		delete character;
 		character = 0;
 	}
@@ -154,7 +154,7 @@ void PLAYER::set_team(int new_team)
 	str_format(buf, sizeof(buf), "%s joined the %s", server_clientname(client_id), game.controller->get_team_name(new_team));
 	game.send_chat(-1, GAMECONTEXT::CHAT_ALL, buf); 
 	
-	kill_character();
+	kill_character(WEAPON_GAME);
 	team = new_team;
 	score = 0;
 	dbg_msg("game", "team_join player='%d:%s' team=%d", client_id, server_clientname(client_id), team);
diff --git a/src/game/server/player.hpp b/src/game/server/player.hpp
index f711317a..e93aee01 100644
--- a/src/game/server/player.hpp
+++ b/src/game/server/player.hpp
@@ -58,7 +58,7 @@ public:
 	
 	CHARACTER *get_character();
 	
-	void kill_character();
+	void kill_character(int weapon);
 
 	void try_respawn();
 	void respawn();