X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fgamemode_lms.qc;h=193b5378ecf594af3e08e5891e1fe216a531f28d;hb=8bd579d6ca74881bd77ae83fd00ac81c9e0108cf;hp=681a1d433a1f62dbc0cfe4b60b7d05b71850b704;hpb=7094e1bf39336183150e9da00f9d3e2d7d0b664b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/gamemode_lms.qc b/qcsrc/server/mutators/gamemode_lms.qc index 681a1d433..193b5378e 100644 --- a/qcsrc/server/mutators/gamemode_lms.qc +++ b/qcsrc/server/mutators/gamemode_lms.qc @@ -18,15 +18,49 @@ float LMS_NewPlayerLives() } // mutator hooks -MUTATOR_HOOKFUNCTION(lms_PlayerSpawn) +MUTATOR_HOOKFUNCTION(lms_ResetMap) +{ + lms_lowest_lives = 999; + lms_next_place = player_count; + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(lms_ResetPlayers) { - if(IS_PLAYER(self)) if(restart_mapalreadyrestarted || (time < game_starttime)) + FOR_EACH_CLIENT(self) + if(IS_PLAYER(self)) PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()); + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(lms_PlayerPreSpawn) +{ + // player is dead and becomes observer + // FIXME fix LMS scoring for new system + if(PlayerScore_Add(self, SP_LMS_RANK, 0) > 0) + self.classname = "observer"; + + return FALSE; +} + +MUTATOR_HOOKFUNCTION(lms_PlayerSpawn) +{ + self.lms_nextcheck = time + autocvar_g_lms_campcheck_interval*2; + self.lms_traveled_distance = 0; return FALSE; } +MUTATOR_HOOKFUNCTION(lms_PlayerDies) +{ + self.respawn_flags |= RESPAWN_FORCE; + + return FALSE; +} + MUTATOR_HOOKFUNCTION(lms_RemovePlayer) { // Only if the player cannot play at all @@ -178,19 +212,7 @@ MUTATOR_HOOKFUNCTION(lms_ItemTouch) PlayerScore_Add(other, SP_LMS_LIVES, autocvar_g_lms_extra_lives); } - return FALSE; -} - -MUTATOR_HOOKFUNCTION(lms_BotSpawn) -{ - // temporary hack to give bots lives - if(PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()) <= 0) - { - PlayerScore_Add(self, SP_LMS_RANK, 666); - self.frags = FRAGS_SPECTATOR; - } - - return FALSE; + return MUT_ITEMTOUCH_CONTINUE; } // scoreboard stuff @@ -212,7 +234,11 @@ void lms_Initialize() MUTATOR_DEFINITION(gamemode_lms) { + MUTATOR_HOOK(reset_map_global, lms_ResetMap, CBC_ORDER_ANY); + MUTATOR_HOOK(reset_map_players, lms_ResetPlayers, CBC_ORDER_ANY); + MUTATOR_HOOK(PutClientInServer, lms_PlayerPreSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerSpawn, lms_PlayerSpawn, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerDies, lms_PlayerDies, CBC_ORDER_ANY); MUTATOR_HOOK(MakePlayerObserver, lms_RemovePlayer, CBC_ORDER_ANY); MUTATOR_HOOK(ClientConnect, lms_ClientConnect, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerPreThink, lms_PlayerThink, CBC_ORDER_ANY); @@ -223,7 +249,6 @@ MUTATOR_DEFINITION(gamemode_lms) MUTATOR_HOOK(ForbidPlayerScore_Clear, lms_KeepScore, CBC_ORDER_ANY); MUTATOR_HOOK(FilterItem, lms_FilterItem, CBC_ORDER_ANY); MUTATOR_HOOK(ItemTouch, lms_ItemTouch, CBC_ORDER_ANY); - MUTATOR_HOOK(HavocBot_ChooseRule, lms_BotSpawn, CBC_ORDER_ANY); MUTATOR_ONADD {