about summary refs log tree commit diff
path: root/src/game/server
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-09-24 14:54:51 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-09-24 14:54:51 +0000
commiteb812244d9fba85f6a117e7b5dc1ee500544a08a (patch)
treee32f5de3b2cc0f288a5a0c21b5a4dd012aa20235 /src/game/server
parent917ebc17c617dfd27e4e997dce713cb1dfb6cfdc (diff)
downloadzcatch-eb812244d9fba85f6a117e7b5dc1ee500544a08a.tar.gz
zcatch-eb812244d9fba85f6a117e7b5dc1ee500544a08a.zip
fixed server crash when dieing
Diffstat (limited to 'src/game/server')
-rw-r--r--src/game/server/entities/character.cpp4
-rw-r--r--src/game/server/player.cpp30
2 files changed, 16 insertions, 18 deletions
diff --git a/src/game/server/entities/character.cpp b/src/game/server/entities/character.cpp
index e79962c2..c04be833 100644
--- a/src/game/server/entities/character.cpp
+++ b/src/game/server/entities/character.cpp
@@ -801,7 +801,7 @@ bool CHARACTER::take_damage(vec2 force, int dmg, int from, int weapon)
 	if(health <= 0)
 	{
 		die(from, weapon);
-
+		
 		// set attacker's face to happy (taunt!)
 		if (from >= 0 && from != player->client_id)
 		{
@@ -809,7 +809,7 @@ bool CHARACTER::take_damage(vec2 force, int dmg, int from, int weapon)
 			chr->emote_type = EMOTE_HAPPY;
 			chr->emote_stop = server_tick() + server_tickspeed();
 		}
-
+	
 		return false;
 	}
 
diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp
index 252e23e3..45d56388 100644
--- a/src/game/server/player.cpp
+++ b/src/game/server/player.cpp
@@ -19,17 +19,6 @@ PLAYER::~PLAYER()
 	character = 0;
 }
 
-/*
-void PLAYER::init(int client_id)
-{
-	// clear everything
-	~PLAYER();
-	mem_zero(this, sizeof(*this));
-	new(this) PLAYER();
-	
-	this->client_id = client_id;
-}*/
-
 void PLAYER::tick()
 {
 	server_setclientscore(client_id, score);
@@ -54,12 +43,21 @@ void PLAYER::tick()
 			latency.accum_max = 0;
 		}
 	}
-	
-	if(spawning && !get_character())
+
+	if(character)
+	{
+		if(character->alive)
+		{
+			view_pos = character->pos;
+		}
+		else
+		{
+			delete character;
+			character = 0;
+		}
+	}
+	else if(spawning)
 		try_respawn();
-	
-	if(get_character())
-		view_pos = get_character()->pos;
 }
 
 void PLAYER::snap(int snaping_client)