about summary refs log tree commit diff
path: root/src/game/server/player.cpp
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-09-23 18:08:19 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-09-23 18:08:19 +0000
commitd9d37b945ee5796553794ef33249c22490494391 (patch)
tree03c1c97c02732095316fdcbc46fdf777de2ab9b0 /src/game/server/player.cpp
parentc10ce4d17b4e21effecb28e0b43df2386ae1baaf (diff)
downloadzcatch-d9d37b945ee5796553794ef33249c22490494391.tar.gz
zcatch-d9d37b945ee5796553794ef33249c22490494391.zip
some server restructure. added hook no attach sound
Diffstat (limited to 'src/game/server/player.cpp')
-rw-r--r--src/game/server/player.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp
index 84efcd81..a31cf21c 100644
--- a/src/game/server/player.cpp
+++ b/src/game/server/player.cpp
@@ -5,17 +5,22 @@
 #include "player.hpp"
 #include "gamecontext.hpp"
 
-PLAYER::PLAYER()
+PLAYER::PLAYER(int client_id)
 {
+	character = 0;
+	this->client_id = client_id;
 }
 
+/*
 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()
 {
@@ -75,9 +80,6 @@ void PLAYER::on_disconnect()
 	game.send_chat(-1, GAMECONTEXT::CHAT_ALL, buf);
 
 	dbg_msg("game", "leave player='%d:%s'", client_id, server_clientname(client_id));
-
-	// clear this whole structure
-	init(-1);
 }
 
 void PLAYER::on_predicted_input(NETOBJ_PLAYER_INPUT *new_input)
@@ -105,16 +107,20 @@ void PLAYER::on_direct_input(NETOBJ_PLAYER_INPUT *new_input)
 
 CHARACTER *PLAYER::get_character()
 {
-	if(character.alive)
-		return &character;
+	if(character && character->alive)
+		return character;
 	return 0;
 }
 
 void PLAYER::kill_character()
 {
-	CHARACTER *chr = get_character();
-	if(chr)
-		chr->die(-1, -1);
+	//CHARACTER *chr = get_character();
+	if(character)
+	{
+		character->die(-1, -1);
+		delete character;
+		character = 0;
+	}
 }
 
 void PLAYER::respawn()
@@ -138,12 +144,12 @@ void PLAYER::set_team(int new_team)
 	score = 0;
 	dbg_msg("game", "team_join player='%d:%s' team=%d", client_id, server_clientname(client_id), team);
 	
-	game.controller->on_player_info_change(&game.players[client_id]);
+	game.controller->on_player_info_change(game.players[client_id]);
 
 	// send all info to this client
 	for(int i = 0; i < MAX_CLIENTS; i++)
 	{
-		if(game.players[i].client_id != -1)
+		if(game.players[i])
 			game.send_info(i, -1);
 	}
 }
@@ -162,6 +168,7 @@ void PLAYER::try_respawn()
 	if(num_ents == 0)
 	{
 		spawning = false;
-		character.spawn(this, spawnpos, team);
+		character = new CHARACTER();
+		character->spawn(this, spawnpos, team);
 	}
 }