diff -Nur teeworlds-0.4.2-src/src/game/server/gs_common.h teeworlds-0.4.2_ks-src/src/game/server/gs_common.h --- teeworlds-0.4.2-src/src/game/server/gs_common.h 2008-04-05 15:13:02.000000000 +0200 +++ teeworlds-0.4.2_ks-src/src/game/server/gs_common.h 2008-04-06 16:00:10.000000000 +0200 @@ -131,8 +131,10 @@ int round_count; bool is_teamplay; - + public: + char spree_msg[128]; + int gametype; gameobject(); @@ -301,6 +303,7 @@ int score; int team; int player_state; // if the client is chatting, accessing a menu or so + unsigned int spree; bool spawning; bool dead; diff -Nur teeworlds-0.4.2-src/src/game/server/gs_game.cpp teeworlds-0.4.2_ks-src/src/game/server/gs_game.cpp --- teeworlds-0.4.2-src/src/game/server/gs_game.cpp 2008-04-05 15:13:02.000000000 +0200 +++ teeworlds-0.4.2_ks-src/src/game/server/gs_game.cpp 2008-04-06 16:00:32.000000000 +0200 @@ -197,12 +197,41 @@ } } +char spree_note[6][64] = { "is on a killing spree!", "is on a rampage!", "is dominating", "is unstoppable!", "is Godlike!", "is Wicked SICK!!" }; + +void broadcast_spree(class player *p1, class player *p2) +{ + NETMSG_SV_BROADCAST msg; + + if(!p2) + str_format(gameobj->spree_msg, sizeof(gameobj->spree_msg), "%s %s", server_clientname(p1->client_id), spree_note[(p1->spree/5)-1]); + else + str_format(gameobj->spree_msg, sizeof(gameobj->spree_msg), "%s's killing spree ended by %s", server_clientname(p1->client_id), server_clientname(p2->client_id)); + + msg.message = gameobj->spree_msg; + msg.pack(MSGFLAG_VITAL); + server_send_msg(-1); +} + +void increment_spree(class player *p) +{ + if(++(p->spree) < 31 && (p->spree)%5 == 0) + broadcast_spree(p, NULL); +} + +void end_spree(class player *victim, class player *killer) +{ + if(victim->spree > 4) + broadcast_spree(victim, killer); + victim->spree = 0; +} int gameobject::on_player_death(class player *victim, class player *killer, int weapon) { // do scoreing if(!killer) return 0; + end_spree(victim, killer); if(killer == victim) victim->score--; // suicide else @@ -211,6 +240,8 @@ killer->score--; // teamkill else killer->score++; // normal kill + increment_spree(killer); + } return 0; } diff -Nur teeworlds-0.4.2-src/src/game/server/gs_server.cpp teeworlds-0.4.2_ks-src/src/game/server/gs_server.cpp --- teeworlds-0.4.2-src/src/game/server/gs_server.cpp 2008-04-05 15:13:02.000000000 +0200 +++ teeworlds-0.4.2_ks-src/src/game/server/gs_server.cpp 2008-04-06 16:00:20.000000000 +0200 @@ -683,6 +683,7 @@ //direction = vec2(0.0f, 1.0f); score = 0; + spree = 0; dead = true; clear_flag(entity::FLAG_PHYSICS); spawning = false; @@ -934,6 +935,7 @@ queued_weapon = 0; reload_timer = 0; + spree = 0; // Create sound and spawn effects create_sound(pos, SOUND_PLAYER_SPAWN);