X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fgamemode_lms.qc;h=0684ac8edb20b90dbbbcc1ceb3d3d66cae1d8201;hb=ba1635faec69d9ae0cb4fe4713f1bf6e43fca90a;hp=193b5378ecf594af3e08e5891e1fe216a531f28d;hpb=e14bb786305e05541496fb5b28c090e0ff1b5783;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/gamemode_lms.qc b/qcsrc/server/mutators/gamemode_lms.qc index 193b5378e..0684ac8ed 100644 --- a/qcsrc/server/mutators/gamemode_lms.qc +++ b/qcsrc/server/mutators/gamemode_lms.qc @@ -22,7 +22,7 @@ MUTATOR_HOOKFUNCTION(lms_ResetMap) { lms_lowest_lives = 999; lms_next_place = player_count; - + return FALSE; } @@ -32,7 +32,7 @@ MUTATOR_HOOKFUNCTION(lms_ResetPlayers) FOR_EACH_CLIENT(self) if(IS_PLAYER(self)) PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()); - + return FALSE; } @@ -46,18 +46,10 @@ MUTATOR_HOOKFUNCTION(lms_PlayerPreSpawn) 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; } @@ -68,13 +60,13 @@ MUTATOR_HOOKFUNCTION(lms_RemovePlayer) self.frags = FRAGS_SPECTATOR; else self.frags = FRAGS_LMS_LOSER; - + if(self.killcount != -666) if(PlayerScore_Add(self, SP_LMS_RANK, 0) > 0 && self.lms_spectate_warning != 2) Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_LMS_NOLIVES, self.netname); else Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_LMS_FORFEIT, self.netname); - + return FALSE; } @@ -82,13 +74,13 @@ MUTATOR_HOOKFUNCTION(lms_ClientConnect) { self.classname = "player"; campaign_bots_may_start = 1; - + if(PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()) <= 0) { PlayerScore_Add(self, SP_LMS_RANK, 666); self.frags = FRAGS_SPECTATOR; } - + return FALSE; } @@ -96,52 +88,15 @@ MUTATOR_HOOKFUNCTION(lms_PlayerThink) { if(self.deadflag == DEAD_DYING) self.deadflag = DEAD_RESPAWNING; - - if not(self.deadflag) - if(autocvar_g_lms_campcheck_interval) - { - vector dist; - - // calculate player movement (in 2 dimensions only, so jumping on one spot doesn't count as movement) - dist = self.prevorigin - self.origin; - dist_z = 0; - self.lms_traveled_distance += fabs(vlen(dist)); - - if((autocvar_g_campaign && !campaign_bots_may_start) || (time < game_starttime)) - { - self.lms_nextcheck = time + autocvar_g_lms_campcheck_interval*2; - self.lms_traveled_distance = 0; - } - - if(time > self.lms_nextcheck) - { - if(self.lms_traveled_distance < autocvar_g_lms_campcheck_distance) - { - Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_LMS_CAMPCHECK); - if(self.vehicle) - Damage(self.vehicle, self, self, autocvar_g_lms_campcheck_damage * 2, DEATH_CAMP, self.vehicle.origin, '0 0 0'); - else - Damage(self, self, self, bound(0, autocvar_g_lms_campcheck_damage, self.health + self.armorvalue * autocvar_g_balance_armor_blockpercent + 5), DEATH_CAMP, self.origin, '0 0 0'); - } - self.lms_nextcheck = time + autocvar_g_lms_campcheck_interval; - self.lms_traveled_distance = 0; - } - } - + return FALSE; } -MUTATOR_HOOKFUNCTION(lms_PlayerDamage) +MUTATOR_HOOKFUNCTION(lms_PlayerRegen) { - if(IS_PLAYER(frag_target)) - if(IS_PLAYER(frag_attacker)) - if(frag_attacker != frag_target) - { - frag_target.lms_traveled_distance = autocvar_g_lms_campcheck_distance; - frag_attacker.lms_traveled_distance = autocvar_g_lms_campcheck_distance; - } - - return FALSE; + if(autocvar_g_lms_regenerate) + return FALSE; + return TRUE; } MUTATOR_HOOKFUNCTION(lms_ForbidThrowing) @@ -167,20 +122,21 @@ MUTATOR_HOOKFUNCTION(lms_GiveFragsForKill) --lms_next_place; } frag_score = 0; - + return TRUE; } MUTATOR_HOOKFUNCTION(lms_SetStartItems) { - start_items &~= IT_UNLIMITED_AMMO; - start_ammo_shells = cvar("g_lms_start_ammo_shells"); - start_ammo_nails = cvar("g_lms_start_ammo_nails"); - start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); - start_ammo_cells = cvar("g_lms_start_ammo_cells"); - start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); - start_health = cvar("g_lms_start_health"); - start_armorvalue = cvar("g_lms_start_armor"); + start_items &= ~IT_UNLIMITED_AMMO; + start_health = warmup_start_health = cvar("g_lms_start_health"); + start_armorvalue = warmup_start_armorvalue = cvar("g_lms_start_armor"); + start_ammo_shells = warmup_start_ammo_shells = cvar("g_lms_start_ammo_shells"); + start_ammo_nails = warmup_start_ammo_nails = cvar("g_lms_start_ammo_nails"); + start_ammo_rockets = warmup_start_ammo_rockets = cvar("g_lms_start_ammo_rockets"); + start_ammo_cells = warmup_start_ammo_cells = cvar("g_lms_start_ammo_cells"); + start_ammo_plasma = warmup_start_ammo_plasma = cvar("g_lms_start_ammo_plasma"); + start_ammo_fuel = warmup_start_ammo_fuel = cvar("g_lms_start_ammo_fuel"); return FALSE; } @@ -199,7 +155,7 @@ MUTATOR_HOOKFUNCTION(lms_FilterItem) self.max_health = 1; return FALSE; } - + return TRUE; } @@ -211,7 +167,7 @@ MUTATOR_HOOKFUNCTION(lms_ItemTouch) Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES); PlayerScore_Add(other, SP_LMS_LIVES, autocvar_g_lms_extra_lives); } - + return MUT_ITEMTOUCH_CONTINUE; } @@ -228,7 +184,7 @@ void lms_Initialize() { lms_lowest_lives = 9999; lms_next_place = 0; - + lms_ScoreRules(); } @@ -237,12 +193,11 @@ 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); - MUTATOR_HOOK(PlayerDamage_Calculate, lms_PlayerDamage, CBC_ORDER_ANY); + MUTATOR_HOOK(PlayerRegen, lms_PlayerRegen, CBC_ORDER_ANY); MUTATOR_HOOK(ForbidThrowCurrentWeapon, lms_ForbidThrowing, CBC_ORDER_ANY); MUTATOR_HOOK(GiveFragsForKill, lms_GiveFragsForKill, CBC_ORDER_ANY); MUTATOR_HOOK(SetStartItems, lms_SetStartItems, CBC_ORDER_ANY);