X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fmutator%2Fgamemode_keyhunt.qc;h=30653641f49ec17ecf4aff870b3ed07b92162221;hb=75f32635eb47f324db31c8f257c935018dedbc23;hp=dbcaa5f898362a082be5f916222151c0c1e30e7d;hpb=68d68e5cbc145772438bfdd775302b91f442f029;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc b/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc index dbcaa5f898..30653641f4 100644 --- a/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc +++ b/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc @@ -16,7 +16,7 @@ REGISTER_MUTATOR(kh, false) kh_Initialize(); ActivateTeamplay(); - SetLimits(autocvar_g_keyhunt_point_limit, autocvar_g_keyhunt_point_leadlimit, -1, -1); + SetLimits(autocvar_g_keyhunt_point_limit, autocvar_g_keyhunt_point_leadlimit, autocvar_timelimit_override, -1); if (autocvar_g_keyhunt_team_spawns) have_team_spawns = -1; // request team spawns } @@ -157,22 +157,22 @@ void kh_ScoreRules(float teams) ScoreRules_basics_end(); } -float kh_KeyCarrier_waypointsprite_visible_for_player(entity e) // runs all the time -{SELFPARAM(); - if(!IS_PLAYER(e) || DIFF_TEAM(self, e)) +bool kh_KeyCarrier_waypointsprite_visible_for_player(entity this, entity player, entity view) // runs all the time +{ + if(!IS_PLAYER(view) || DIFF_TEAM(this, view)) if(!kh_tracking_enabled) return false; return true; } -float kh_Key_waypointsprite_visible_for_player(entity e) // ?? -{SELFPARAM(); +bool kh_Key_waypointsprite_visible_for_player(entity this, entity player, entity view) +{ if(!kh_tracking_enabled) return false; - if(!self.owner) + if(!this.owner) return true; - if(!self.owner.owner) + if(!this.owner.owner) return true; return false; // draw only when key is not owned } @@ -215,12 +215,12 @@ void kh_Controller_SetThink(float t, kh_Think_t func) // runs occasionaly kh_controller.nextthink = time; // force } void kh_WaitForPlayers(); -void kh_Controller_Think() // called a lot -{SELFPARAM(); +void kh_Controller_Think(entity this) // called a lot +{ if(intermission_running) return; if(self.cnt > 0) - { if(self.think != kh_WaitForPlayers) { self.cnt -= 1; } } + { if(getthink(self) != kh_WaitForPlayers) { self.cnt -= 1; } } else if(self.cnt == 0) { self.cnt -= 1; @@ -505,8 +505,8 @@ void kh_Key_Collect(entity key, entity player) //a player picks up a dropped ke kh_Key_AssignTo(key, player); // this also updates .kh_state } -void kh_Key_Touch() // runs many, many times when a key has been dropped and can be picked up -{SELFPARAM(); +void kh_Key_Touch(entity this) // runs many, many times when a key has been dropped and can be picked up +{ if(intermission_running) return; @@ -726,8 +726,8 @@ void kh_LoserTeam(float teem, entity lostkey) // runs when a player pushes a fl kh_FinishRound(); } -void kh_Key_Think() // runs all the time -{SELFPARAM(); +void kh_Key_Think(entity this) // runs all the time +{ if(intermission_running) return; @@ -792,8 +792,8 @@ void kh_Key_Spawn(entity initial_owner, float _angle, float i) // runs every ti entity key = spawn(); key.count = i; key.classname = STR_ITEM_KH_KEY; - key.touch = kh_Key_Touch; - key.think = kh_Key_Think; + settouch(key, kh_Key_Touch); + setthink(key, kh_Key_Think); key.nextthink = time; key.items = IT_KEY1 | IT_KEY2; key.cnt = _angle; @@ -878,7 +878,7 @@ void kh_Key_DropOne(entity key) kh_Key_AssignTo(key, world); makevectors(player.v_angle); - key.velocity = W_CalculateProjectileVelocity(player.velocity, autocvar_g_balance_keyhunt_throwvelocity * v_forward, false); + key.velocity = W_CalculateProjectileVelocity(player, player.velocity, autocvar_g_balance_keyhunt_throwvelocity * v_forward, false); key.pusher = world; key.pushltime = time + autocvar_g_balance_keyhunt_protecttime; key.kh_dropperteam = key.team; @@ -903,7 +903,7 @@ void kh_Key_DropAll(entity player, float suicide) // runs whenever a player dies Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT(key, INFO_KEYHUNT_LOST), player.netname); kh_Key_AssignTo(key, world); makevectors('-1 0 0' * (45 + 45 * random()) + '0 360 0' * random()); - key.velocity = W_CalculateProjectileVelocity(player.velocity, autocvar_g_balance_keyhunt_dropvelocity * v_forward, false); + key.velocity = W_CalculateProjectileVelocity(player, player.velocity, autocvar_g_balance_keyhunt_dropvelocity * v_forward, false); key.pusher = mypusher; key.pushltime = time + autocvar_g_balance_keyhunt_protecttime; if(suicide) @@ -1058,7 +1058,7 @@ void kh_Initialize() // sets up th KH environment // make a KH entity for controlling the game kh_controller = spawn(); - kh_controller.think = kh_Controller_Think; + setthink(kh_controller, kh_Controller_Think); kh_Controller_SetThink(0, kh_WaitForPlayers); setmodel(kh_controller, MDL_KH_KEY); @@ -1290,94 +1290,101 @@ void havocbot_role_kh_freelancer(entity this) // register this as a mutator MUTATOR_HOOKFUNCTION(kh, ClientDisconnect) -{SELFPARAM(); - kh_Key_DropAll(self, true); - return 0; +{ + entity player = M_ARGV(0, entity); + + kh_Key_DropAll(player, true); } MUTATOR_HOOKFUNCTION(kh, MakePlayerObserver) -{SELFPARAM(); - kh_Key_DropAll(self, true); - return 0; +{ + entity player = M_ARGV(0, entity); + + kh_Key_DropAll(player, true); } MUTATOR_HOOKFUNCTION(kh, PlayerDies) { - if(frag_target == other) + entity frag_attacker = M_ARGV(1, entity); + entity frag_target = M_ARGV(2, entity); + + if(frag_target == frag_attacker) kh_Key_DropAll(frag_target, true); - else if(IS_PLAYER(other)) + else if(IS_PLAYER(frag_attacker)) kh_Key_DropAll(frag_target, false); else kh_Key_DropAll(frag_target, true); - return 0; } MUTATOR_HOOKFUNCTION(kh, GiveFragsForKill, CBC_ORDER_FIRST) { - frag_score = kh_HandleFrags(frag_attacker, frag_target, frag_score); - return 0; + entity frag_attacker = M_ARGV(0, entity); + entity frag_target = M_ARGV(1, entity); + float frag_score = M_ARGV(2, float); + M_ARGV(2, float) = kh_HandleFrags(frag_attacker, frag_target, frag_score); } MUTATOR_HOOKFUNCTION(kh, MatchEnd) { kh_finalize(); - return 0; } MUTATOR_HOOKFUNCTION(kh, GetTeamCount, CBC_ORDER_EXCLUSIVE) { - ret_float = kh_teams; - return false; + M_ARGV(0, float) = kh_teams; } MUTATOR_HOOKFUNCTION(kh, SpectateCopy) -{SELFPARAM(); - self.kh_state = other.kh_state; - return 0; +{ + entity spectatee = M_ARGV(0, entity); + entity client = M_ARGV(1, entity); + + client.kh_state = spectatee.kh_state; } MUTATOR_HOOKFUNCTION(kh, PlayerUseKey) -{SELFPARAM(); +{ + entity player = M_ARGV(0, entity); + if(MUTATOR_RETURNVALUE == 0) { - entity k; - k = self.kh_next; + entity k = player.kh_next; if(k) { kh_Key_DropOne(k); - return 1; + return true; } } - return 0; } MUTATOR_HOOKFUNCTION(kh, HavocBot_ChooseRole) { - SELFPARAM(); - if(IS_DEAD(self)) + entity bot = M_ARGV(0, entity); + + if(IS_DEAD(bot)) return true; float r = random() * 3; if (r < 1) - self.havocbot_role = havocbot_role_kh_offense; + bot.havocbot_role = havocbot_role_kh_offense; else if (r < 2) - self.havocbot_role = havocbot_role_kh_defense; + bot.havocbot_role = havocbot_role_kh_defense; else - self.havocbot_role = havocbot_role_kh_freelancer; + bot.havocbot_role = havocbot_role_kh_freelancer; return true; } MUTATOR_HOOKFUNCTION(kh, DropSpecialItems) { + entity frag_target = M_ARGV(0, entity); + kh_Key_DropAll(frag_target, false); - return false; } MUTATOR_HOOKFUNCTION(kh, reset_map_global) { kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round + (game_starttime - time), kh_StartRound); - return false; } #endif