void spawnpoint_use()
{
- if(teams_matter)
+ if(teamplay)
if(have_team_spawns > 0)
{
self.team = activator.team;
{
// we request a spawn for a team, and we have team
// spawns, but that team has no spawns?
- if(have_team_spawns[0])
+ if(have_team_spawns_forteam[0])
// try noteam spawns
teamcheck = 0;
else
else
teamcheck = self.team; // MUST be team
}
- else if(have_team_spawns == 0 && have_team_spawns[0])
+ else if(have_team_spawns == 0 && have_team_spawns_forteam[0])
teamcheck = 0; // MUST be noteam
else
teamcheck = -1;
void PutObserverInServer (void)
{
entity spot;
-
+ self.hud = HUD_NORMAL;
race_PreSpawnObserver();
spot = SelectSpawnPoint (TRUE);
self.alivetime = 0;
}
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELESE);
+
if(self.flagcarried)
DropFlag(self.flagcarried, world, world);
}
else
self.frags = FRAGS_SPECTATOR;
-
- if(self.shownames)
- remove(self.shownames);
}
void FixPlayermodel()
if(autocvar_sv_defaultcharacter == 1) {
defaultskin = 0;
- if(teams_matter)
+ if(teamplay)
{
string s;
s = Team_ColorNameLowerCase(self.team);
if(chmdl || oldskin != self.skinindex)
self.species = player_getspecies(); // model or skin has changed
- if(!teams_matter)
+ if(!teamplay)
if(strlen(autocvar_sv_defaultplayercolors))
if(self.clientcolors != stof(autocvar_sv_defaultplayercolors))
setcolor(self, stof(autocvar_sv_defaultplayercolors));
self.oldorigin = self.origin;
self.prevorigin = self.origin;
self.lastrocket = world; // stop rocket guiding, no revenge from the grave!
+ self.lastteleporttime = time; // prevent insane speeds due to changing origin
if(g_arena)
{
//stuffcmd(self, "set viewsize $tmpviewsize \n");
if (autocvar_g_spawnsound)
- sound (self, CHAN_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM);
if(g_assault) {
if(self.team == assault_attacker_team)
oldself = self;
self = spot;
activator = oldself;
+ string s;
+ s = self.target;
+ self.target = string_null;
SUB_UseTargets();
+ self.target = s;
activator = world;
self = oldself;
PutObserverInServer ();
}
- if(!self.shownames)
- {
- self.shownames = spawn();
- self.shownames.owner = self;
- self.shownames.think = shownames_think;
- self.shownames.nextthink = time;
- Net_LinkEntity(self.shownames, FALSE, 0, SendEntity_ShowNames);
- }
-
//if(g_ctf)
// ctf_playerchanged();
}
WriteCoord(MSG_ENTITY, self.ebouncefactor); // g_balance_grenadelauncher_bouncefactor
WriteCoord(MSG_ENTITY, self.ebouncestop); // g_balance_grenadelauncher_bouncestop
WriteByte(MSG_ENTITY, autocvar_g_balance_nex_secondary); // client has to know if it should zoom or not
- WriteByte(MSG_ENTITY, autocvar_g_balance_sniperrifle_secondary); // client has to know if it should zoom or not
+ WriteByte(MSG_ENTITY, autocvar_g_balance_rifle_secondary); // client has to know if it should zoom or not
WriteByte(MSG_ENTITY, serverflags); // client has to know if it should zoom or not
WriteByte(MSG_ENTITY, autocvar_g_balance_minelayer_limit); // minelayer max mines
WriteByte(MSG_ENTITY, autocvar_g_balance_hagar_secondary_load_max); // hagar max loadable rockets
void ClientKill_Now()
{
- remove(self.killindicator);
+ if(self.vehicle)
+ {
+ vehicles_exit(VHEF_RELESE);
+ if(!self.killindicator_teamchange)
+ {
+ self.vehicle_health = -1;
+ Damage(self, self, self, 1 , DEATH_KILL, self.origin, '0 0 0');
+ }
+ }
+
+ if(self.killindicator && !wasfreed(self.killindicator))
+ remove(self.killindicator);
+
self.killindicator = world;
if(self.killindicator_teamchange)
}
void KillIndicator_Think()
{
+ if (gameover)
+ {
+ self.owner.killindicator = world;
+ remove(self);
+ return;
+ }
+
if (!self.owner.modelindex)
{
self.owner.killindicator = world;
{
float killtime;
entity e;
+
+ if (gameover)
+ return;
+
killtime = autocvar_g_balance_kill_delay;
if(g_race_qualifying || g_cts)
void ClientKill (void)
{
+ if (gameover)
+ return;
+
if((g_arena || g_ca) && ((champion && champion.classname == "player" && player_count > 1) || player_count == 1)) // don't allow a kill in this case either
{
// do nothing
e.lip = 0;
}
-void DoTeamChange(float destteam)
-{
- float t, c0;
- if(!teams_matter)
- {
- if(destteam >= 0)
- SetPlayerColors(self, destteam);
- return;
- }
- if(self.classname == "player")
- if(destteam == -1)
- {
- CheckAllowedTeams(self);
- t = FindSmallestTeam(self, TRUE);
- switch(self.team)
- {
- case COLOR_TEAM1: c0 = c1; break;
- case COLOR_TEAM2: c0 = c2; break;
- case COLOR_TEAM3: c0 = c3; break;
- case COLOR_TEAM4: c0 = c4; break;
- default: c0 = 999;
- }
- switch(t)
- {
- case 1:
- if(c0 > c1)
- destteam = COLOR_TEAM1;
- break;
- case 2:
- if(c0 > c2)
- destteam = COLOR_TEAM2;
- break;
- case 3:
- if(c0 > c3)
- destteam = COLOR_TEAM3;
- break;
- case 4:
- if(c0 > c4)
- destteam = COLOR_TEAM4;
- break;
- }
- if(destteam == -1)
- return;
- }
- if(destteam == self.team && destteam >= 0 && !self.killindicator)
- return;
- ClientKill_TeamChange(destteam);
-}
-
void FixClientCvars(entity e)
{
// send prediction settings to the client
playerdemo_init();
anticheat_init();
-
+
race_PreSpawnObserver();
//if(g_domination)
else
self.team_forced = 0;
- if(!teams_matter)
+ if(!teamplay)
if(self.team_forced > 0)
self.team_forced = 0;
if((autocvar_sv_spectate == 1 && !g_lms) || autocvar_g_campaign || self.team_forced < 0) {
self.classname = "observer";
} else {
- if(teams_matter)
+ if(teamplay)
{
if(autocvar_g_balance_teams || autocvar_g_balance_teams_force)
{
self.playerid = (playerid_last = playerid_last + 1);
+ if(clienttype(self) == CLIENTTYPE_BOT)
+ PlayerStats_AddPlayer(self);
+
if(autocvar_sv_eventlog)
GameLogEcho(strcat(":join:", ftos(self.playerid), ":", ftos(num_for_edict(self)), ":", ((clienttype(self) == CLIENTTYPE_REAL) ? self.netaddress : "bot"), ":", self.netname));
GetCvars(0);
// notify about available teams
- if(teams_matter)
+ if(teamplay)
{
CheckAllowedTeams(self);
t = 0; if(c1 >= 0) t |= 1; if(c2 >= 0) t |= 2; if(c3 >= 0) t |= 4; if(c4 >= 0) t |= 8;
ctf_clientconnect();
}*/
- if(teams_matter || radar_showennemies)
- attach_entcs();
+ attach_entcs();
bot_relinkplayerlist();
set_dom_state(self);
CheatInitClient();
-
- PlayerStats_AddPlayer(self);
}
/*
void ReadyCount();
void ClientDisconnect (void)
{
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELESE);
+
if not(self.flags & FL_CLIENT)
{
print("Warning: ClientDisconnect without ClientConnect\n");
self.playerid = 0;
ReadyCount();
- remove(self.shownames);
-
// free cvars
GetCvars(-1);
}
local float c;
c = self.clientcolors & 15;
// LordHavoc: only bothering to support white, green, red, yellow, blue
- if (!teams_matter) self.colormod = '0 0 0';
+ if (!teamplay) self.colormod = '0 0 0';
else if (c == 0) self.colormod = '1.00 1.00 1.00';
else if (c == 3) self.colormod = '0.10 1.73 0.10';
else if (c == 4) self.colormod = '1.73 0.10 0.10';
if(clienttype(self) == CLIENTTYPE_REAL)
if(floor(finished - time - frametime) != floor(finished - time))
if(finished - time < 6)
- sound (self, CHAN_AUTO, samp, VOL_BASE, ATTN_NORM);
+ sound (self, CH_INFO, samp, VOL_BASE, ATTN_NORM);
}
/**
{
// add a way to see what the items were BEFORE all of these checks for the mutator hook
olditems = self.items;
-
+
if((self.items & IT_USING_JETPACK) && !self.deadflag)
{
- SoundEntity_StartSound(self, CHAN_PLAYER, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation);
+ SoundEntity_StartSound(self, CH_TRIGGER_SINGLE, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation);
self.modelflags |= MF_ROCKET;
}
else
{
- SoundEntity_StopSound(self, CHAN_PLAYER);
+ SoundEntity_StopSound(self, CH_TRIGGER_SINGLE);
self.modelflags &~= MF_ROCKET;
}
if(!self.modelindex || self.deadflag) // don't apply the flags if the player is gibbed
return;
-
+
Fire_ApplyDamage(self);
Fire_ApplyEffect(self);
if (time < self.spawnshieldtime)
self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT);
}
-
+
MUTATOR_CALLHOOK(PlayerPowerups);
}
SetZoomState(spectatee.zoomstate);
anticheat_spectatecopy(spectatee);
+
+ //self.vehicle = spectatee.vehicle;
+
+ self.hud = spectatee.hud;
+ if(spectatee.vehicle)
+ {
+ setorigin(self, spectatee.origin);
+ self.velocity = spectatee.vehicle.velocity;
+ self.v_angle += spectatee.vehicle.angles;
+ //self.v_angle_x *= -1;
+ self.vehicle_health = spectatee.vehicle_health;
+ self.vehicle_shield = spectatee.vehicle_shield;
+ self.vehicle_energy = spectatee.vehicle_energy;
+ self.vehicle_ammo1 = spectatee.vehicle_ammo1;
+ self.vehicle_ammo2 = spectatee.vehicle_ammo2;
+ self.vehicle_reload1 = spectatee.vehicle_reload1;
+ self.vehicle_reload2 = spectatee.vehicle_reload2;
+
+ msg_entity = self;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, spectatee);
+ //self.tur_head = spectatee.vehicle.vehicle_viewport;
+ }
}
float SpectateUpdate() {
if(!self.enemy)
- return 0;
+ return 0;
if (self == self.enemy)
return 0;
self.enemy = other;
if(self.enemy.classname == "player") {
- msg_entity = self;
- WriteByte(MSG_ONE, SVC_SETVIEW);
- WriteEntity(MSG_ONE, self.enemy);
- //stuffcmd(self, "set viewsize $tmpviewsize \n");
- self.movetype = MOVETYPE_NONE;
- accuracy_resend(self);
-
- if(!SpectateUpdate())
- PutObserverInServer();
-
- return 1;
+ if(self.enemy.vehicle)
+ {
+ msg_entity = self;
+ WriteByte(MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, self.enemy);
+ //stuffcmd(self, "set viewsize $tmpviewsize \n");
+ self.movetype = MOVETYPE_NONE;
+ accuracy_resend(self);
+ }
+ else
+ {
+ msg_entity = self;
+ WriteByte(MSG_ONE, SVC_SETVIEW);
+ WriteEntity(MSG_ONE, self.enemy);
+ //stuffcmd(self, "set viewsize $tmpviewsize \n");
+ self.movetype = MOVETYPE_NONE;
+ accuracy_resend(self);
+
+ if(!SpectateUpdate())
+ PutObserverInServer();
+ }
+ return 1;
} else {
return 0;
}
void LeaveSpectatorMode()
{
if(nJoinAllowed(1)) {
- if(!teams_matter || autocvar_g_campaign || autocvar_g_balance_teams || (self.wasplayer && autocvar_g_changeteam_banned) || self.team_forced > 0) {
+ if(!teamplay || autocvar_g_campaign || autocvar_g_balance_teams || (self.wasplayer && autocvar_g_changeteam_banned) || self.team_forced > 0) {
self.classname = "player";
if(autocvar_g_campaign || autocvar_g_balance_teams || autocvar_g_balance_teams_force)
return;
}
}
+ if(!SpectateUpdate())
+ PutObserverInServer();
}
PrintWelcomeMessage(self);
self.flags |= FL_CLIENT | FL_NOTARGET;
}
+float ctf_usekey();
+void PlayerUseKey()
+{
+ if(self.classname != "player")
+ return;
+
+ if(self.vehicle)
+ {
+ vehicles_exit(VHEF_NORMAL);
+ return;
+ }
+
+ // a use key was pressed; call handlers
+ if(ctf_usekey())
+ return;
+
+ MUTATOR_CALLHOOK(PlayerUseKey);
+}
+
.float touchexplode_time;
/*
Called every frame for each client before the physics are run
=============
*/
+.float usekeypressed;
void() ctf_setstatus;
void() nexball_setstatus;
.float items_added;
MUTATOR_CALLHOOK(PlayerPreThink);
+ if(self.BUTTON_USE && !self.usekeypressed)
+ PlayerUseKey();
+ self.usekeypressed = self.BUTTON_USE;
+
if(self.classname == "player") {
// if(self.netname == "Wazat")
// bprint(self.classname, "\n");
//don't allow the player to turn around while game is paused!
if(timeoutStatus == 2) {
+ // FIXME turn this into CSQC stuff
self.v_angle = self.lastV_angle;
self.angles = self.lastV_angle;
self.fixangle = TRUE;
}
if(!zoomstate_set)
- SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_NEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_SNIPERRIFLE && autocvar_g_balance_sniperrifle_secondary == 0));
+ SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_NEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_RIFLE && autocvar_g_balance_rifle_secondary == 0));
float oldspectatee_status;
oldspectatee_status = self.spectatee_status;
oldself = self; self = self.teamkill_soundsource;
oldpusher = self.pusher; self.pusher = oldself;
- PlayerSound(playersound_teamshoot, CHAN_VOICE, VOICETYPE_LASTATTACKER_ONLY);
+ PlayerSound(playersound_teamshoot, CH_VOICE, VOICETYPE_LASTATTACKER_ONLY);
self.pusher = oldpusher;
self = oldself;
if(time > self.taunt_soundtime)
{
self.taunt_soundtime = 0;
- PlayerSound(playersound_taunt, CHAN_VOICE, VOICETYPE_AUTOTAUNT);
+ PlayerSound(playersound_taunt, CH_VOICE, VOICETYPE_AUTOTAUNT);
}
target_voicescript_next(self);
} else if (self.classname == "spectator") {
//do nothing
}
-
+
/*
float i;
for(i = 0; i < 1000; ++i)
if(self.waypointsprite_attachedforcarrier)
WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent));
-
+
if(self.classname == "player" && self.deadflag == DEAD_NO && autocvar_r_showbboxes)
{
if(!self.showheadshotbbox)
else
{
if(self.showheadshotbbox)
- remove(self.showheadshotbbox);
+ if(self.showheadshotbbox && !wasfreed(self.showheadshotbbox))
+ remove(self.showheadshotbbox);
}
playerdemo_write();