diff options
Diffstat (limited to 'src/game/server')
| -rw-r--r-- | src/game/server/entities/character.cpp | 4 | ||||
| -rw-r--r-- | src/game/server/entities/character.hpp | 7 | ||||
| -rw-r--r-- | src/game/server/gamemodes/tdm.cpp | 14 | ||||
| -rw-r--r-- | src/game/server/hooks.cpp | 2 | ||||
| -rw-r--r-- | src/game/server/player.cpp | 8 | ||||
| -rw-r--r-- | src/game/server/player.hpp | 2 |
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(); |