#include <server/world.qh>
.entity ballcarried;
+.entity previous_owner; // also used on kh keys
int autocvar_g_keepaway_ballcarrier_effects;
float autocvar_g_keepaway_ballcarrier_damage;
sound(this, CH_TRIGGER, SND_KA_TOUCH, VOL_BASE, ATTEN_NORM);
return;
}
- else if(this.wait > time) { return; }
+ else if(this.wait > time && this.previous_owner == toucher)
+ return;
// attach the ball to the player
this.owner = toucher;
// reset the ball
setattachment(ball, NULL, "");
set_movetype(ball, MOVETYPE_BOUNCE);
- ball.wait = time + 1;
+ ball.previous_owner = player;
+ ball.wait = time + 0.5; // same as for thrown weapons
settouch(ball, ka_TouchEvent);
setthink(ball, ka_RespawnBall);
ball.nextthink = time + autocvar_g_keepawayball_respawntime;
.entity kh_next, kh_prev; // linked list
.float kh_droptime;
.int kh_dropperteam;
-.entity kh_previous_owner;
+.entity previous_owner; // also used on ka balls
.int kh_previous_owner_playerid;
int kh_key_dropped, kh_key_carried;
// let key.team stay
key.modelindex = kh_key_dropped;
navigation_dynamicgoal_set(key, key.owner);
- key.kh_previous_owner = key.owner;
+ key.previous_owner = key.owner;
key.kh_previous_owner_playerid = key.owner.playerid;
}
if(attacker)
{
- if(lostkey.kh_previous_owner)
- kh_Scores_Event(lostkey.kh_previous_owner, NULL, "pushed", 0, -autocvar_g_balance_keyhunt_score_push);
+ if(lostkey.previous_owner)
+ kh_Scores_Event(lostkey.previous_owner, NULL, "pushed", 0, -autocvar_g_balance_keyhunt_score_push);
// don't actually GIVE them the -nn points, just log
kh_Scores_Event(attacker, NULL, "push", autocvar_g_balance_keyhunt_score_push, 0);
GameRules_scoring_add(attacker, KH_PUSHES, 1);
if(key.owner && key.team != loser_team)
++keys;
- if(lostkey.kh_previous_owner)
- kh_Scores_Event(lostkey.kh_previous_owner, NULL, "destroyed", 0, -autocvar_g_balance_keyhunt_score_destroyed);
+ if(lostkey.previous_owner)
+ kh_Scores_Event(lostkey.previous_owner, NULL, "destroyed", 0, -autocvar_g_balance_keyhunt_score_destroyed);
// don't actually GIVE them the -nn points, just log
- if(lostkey.kh_previous_owner.playerid == lostkey.kh_previous_owner_playerid)
- GameRules_scoring_add(lostkey.kh_previous_owner, KH_DESTRUCTIONS, 1);
+ if(lostkey.previous_owner.playerid == lostkey.kh_previous_owner_playerid)
+ GameRules_scoring_add(lostkey.previous_owner, KH_DESTRUCTIONS, 1);
DistributeEvenly_Init(autocvar_g_balance_keyhunt_score_destroyed, keys * of + players);
int realteam = kh_Team_ByID(lostkey.count);
Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, APP_TEAM_NUM(loser_team, CENTER_ROUND_TEAM_LOSS));
if(attacker)
- Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(realteam, INFO_KEYHUNT_PUSHED), attacker.netname, lostkey.kh_previous_owner.netname);
+ Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(realteam, INFO_KEYHUNT_PUSHED), attacker.netname, lostkey.previous_owner.netname);
else
- Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(realteam, INFO_KEYHUNT_DESTROYED), lostkey.kh_previous_owner.netname);
+ Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(realteam, INFO_KEYHUNT_DESTROYED), lostkey.previous_owner.netname);
play2all(SND(KH_DESTROY));
te_tarexplosion(lostkey.origin);
#include <common/effects/all.qh>
.entity ballcarried;
+.entity previous_owner; // also used on kh keys
int autocvar_g_tka_ballcarrier_effects;
float autocvar_g_tka_ballcarrier_damage;
sound(this, CH_TRIGGER, SND_KA_TOUCH, VOL_BASE, ATTEN_NORM);
return;
}
- else if(this.wait > time) { return; }
+ else if(this.wait > time && this.previous_owner == toucher)
+ return;
// attach the ball to the player
this.owner = toucher;
// reset the ball
setattachment(ball, NULL, "");
set_movetype(ball, MOVETYPE_BOUNCE);
- ball.wait = time + 1;
+ ball.previous_owner = player;
+ ball.wait = time + 0.5; // same as for thrown weapons
settouch(ball, tka_TouchEvent);
setthink(ball, tka_RespawnBall);
ball.nextthink = time + autocvar_g_tkaball_respawntime;