Post: Forcing final killcam winner
12-11-2015, 02:45 PM #1
BullyWiiPlaza
Climbing up the ladder
(adsbygoogle = window.adsbygoogle || []).push({}); How do you force the final killcam to always show your last kill? I analyzed _killcam.gsc but didn't find a good way to accomplish this. So far I have tried repeatedly overwriting
    level.finalKillCam_winner
with
    self
since the function caller should be the final killcam winner but it's not working in combination with ending the game using either
    maps\mp\gametypes\_globallogic::endGame("tie", level.hostname + " is the best ^1<3");
or
    maps\mp\gametypes\_globallogic::forceEnd();
. Finally I noticed that the game always keeps track of the last killcam of each team so I figured, why not write my killcam data to each team's final killcam data? Here's the code:

    beginForcingFinalKillcam()
{
if(!level.forcingFinalKillcam)
{
level.forcingFinalKillcam = true;

thread forceFinalKillcam();
}
}

forceFinalKillcam()
{
myTeam = "none";

if(level.myTeamBased)
{
myTeam = self.myTeam;
}

if(!isDefined(level.savedKillcamSettings))
{
level.savedKillcamSettings = [];
level.savedKillcamSettings[myTeam] = spawnStruct();
level.savedKillcamSettings[myTeam].spectatorclient = undefined;
level.savedKillcamSettings[myTeam].weapon = undefined;
level.savedKillcamSettings[myTeam].deathTime = undefined;
level.savedKillcamSettings[myTeam].deathTimeOffset = undefined;
level.savedKillcamSettings[myTeam].offsettime = undefined;
level.savedKillcamSettings[myTeam].entityindex = undefined;
level.savedKillcamSettings[myTeam].targetentityindex = undefined;
level.savedKillcamSettings[myTeam].entitystarttime = undefined;
level.savedKillcamSettings[myTeam].perks = undefined;
level.savedKillcamSettings[myTeam].killstreaks = undefined;
level.savedKillcamSettings[myTeam].attacker = undefined;
}

while(true)
{
currentlySavedAttacker = level.finalKillcamSettings[myTeam].attacker;

if(currentlySavedAttacker == self)
{
// Backup our killcam data
level.savedKillcamSettings[myTeam].spectatorclient = level.finalKillcamSettings[myTeam].spectatorclient;
level.savedKillcamSettings[myTeam].weapon = level.finalKillcamSettings[myTeam].weapon;
level.savedKillcamSettings[myTeam].deathTime = level.finalKillcamSettings[myTeam].deathTime;
level.savedKillcamSettings[myTeam].deathTimeOffset = level.finalKillcamSettings[myTeam].deathTimeOffset;
level.savedKillcamSettings[myTeam].offsettime = level.finalKillcamSettings[myTeam].offsettime;
level.savedKillcamSettings[myTeam].entityindex = level.finalKillcamSettings[myTeam].entityindex;
level.savedKillcamSettings[myTeam].targetentityindex = level.finalKillcamSettings[myTeam].targetentityindex;
level.savedKillcamSettings[myTeam].entitystarttime = level.finalKillcamSettings[myTeam].entitystarttime;
level.savedKillcamSettings[myTeam].perks = level.finalKillcamSettings[myTeam].perks;
level.savedKillcamSettings[myTeam].killstreaks = level.finalKillcamSettings[myTeam].killstreaks;
level.savedKillcamSettings[myTeam].attacker = level.finalKillcamSettings[myTeam].attacker;
}
else
{
teams = level.teams;
teams[teams.size] = "none"; // Also affect the team-less modes

foreach(team in teams)
{
// Restore our killcam data
level.finalKillcamSettings[team].spectatorclient = level.savedKillcamSettings[myTeam].spectatorclient;
level.finalKillcamSettings[team].weapon = level.savedKillcamSettings[myTeam].weapon;
level.finalKillcamSettings[team].deathTime = level.savedKillcamSettings[myTeam].deathTime;
level.finalKillcamSettings[team].deathTimeOffset = level.savedKillcamSettings[myTeam].deathTimeOffset;
level.finalKillcamSettings[team].offsettime = level.savedKillcamSettings[myTeam].offsettime;
level.finalKillcamSettings[team].entityindex = level.savedKillcamSettings[myTeam].entityindex;
level.finalKillcamSettings[team].targetentityindex = level.savedKillcamSettings[myTeam].targetentityindex;
level.finalKillcamSettings[team].entitystarttime = level.savedKillcamSettings[myTeam].entitystarttime;
level.finalKillcamSettings[team].perks = level.savedKillcamSettings[myTeam].perks;
level.finalKillcamSettings[team].killstreaks = level.savedKillcamSettings[myTeam].killstreaks;
level.finalKillcamSettings[team].attacker = level.savedKillcamSettings[myTeam].attacker;

wait 0.05;
}
}

wait 0.1;
}
}

I called it as follows:

    onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");

while(true)
{
self waittill("spawned_player");

if(self isHost())
{
beginForcingFinalKillcam();
}
}
}

I believe the code worked as long as I only wrote my last kill to my own team's final kill storage but problem being, the game freezes shortly after it started when I'm writing to all teams. I'm not sure why this happens. Anyway, isn't there a better way to force the killcam? I believe that only the winner or winning team's killcam is shown so forcing a win would be great to know as well how to do this. Thanks. I'm tired of some n00b stealing my epic final trickshot killcam in team-based game modes and in general so yeah. Maybe I'm also missing an obvious way to accomplish this Smile
(adsbygoogle = window.adsbygoogle || []).push({});
12-15-2015, 02:54 PM #2
thahitcrew
Gym leader
Originally posted by BullyWiiPlaza View Post
How do you force the final killcam to always show your last kill? I analyzed _killcam.gsc but didn't find a good way to accomplish this. So far I have tried repeatedly overwriting
    level.finalKillCam_winner
with
    self
since the function caller should be the final killcam winner but it's not working in combination with ending the game using either
    maps\mp\gametypes\_globallogic::endGame("tie", level.hostname + " is the best ^1<3");
or
    maps\mp\gametypes\_globallogic::forceEnd();
. Finally I noticed that the game always keeps track of the last killcam of each team so I figured, why not write my killcam data to each team's final killcam data? Here's the code:

    beginForcingFinalKillcam()
{
if(!level.forcingFinalKillcam)
{
level.forcingFinalKillcam = true;

thread forceFinalKillcam();
}
}

forceFinalKillcam()
{
myTeam = "none";

if(level.myTeamBased)
{
myTeam = self.myTeam;
}

if(!isDefined(level.savedKillcamSettings))
{
level.savedKillcamSettings = [];
level.savedKillcamSettings[myTeam] = spawnStruct();
level.savedKillcamSettings[myTeam].spectatorclient = undefined;
level.savedKillcamSettings[myTeam].weapon = undefined;
level.savedKillcamSettings[myTeam].deathTime = undefined;
level.savedKillcamSettings[myTeam].deathTimeOffset = undefined;
level.savedKillcamSettings[myTeam].offsettime = undefined;
level.savedKillcamSettings[myTeam].entityindex = undefined;
level.savedKillcamSettings[myTeam].targetentityindex = undefined;
level.savedKillcamSettings[myTeam].entitystarttime = undefined;
level.savedKillcamSettings[myTeam].perks = undefined;
level.savedKillcamSettings[myTeam].killstreaks = undefined;
level.savedKillcamSettings[myTeam].attacker = undefined;
}

while(true)
{
currentlySavedAttacker = level.finalKillcamSettings[myTeam].attacker;

if(currentlySavedAttacker == self)
{
// Backup our killcam data
level.savedKillcamSettings[myTeam].spectatorclient = level.finalKillcamSettings[myTeam].spectatorclient;
level.savedKillcamSettings[myTeam].weapon = level.finalKillcamSettings[myTeam].weapon;
level.savedKillcamSettings[myTeam].deathTime = level.finalKillcamSettings[myTeam].deathTime;
level.savedKillcamSettings[myTeam].deathTimeOffset = level.finalKillcamSettings[myTeam].deathTimeOffset;
level.savedKillcamSettings[myTeam].offsettime = level.finalKillcamSettings[myTeam].offsettime;
level.savedKillcamSettings[myTeam].entityindex = level.finalKillcamSettings[myTeam].entityindex;
level.savedKillcamSettings[myTeam].targetentityindex = level.finalKillcamSettings[myTeam].targetentityindex;
level.savedKillcamSettings[myTeam].entitystarttime = level.finalKillcamSettings[myTeam].entitystarttime;
level.savedKillcamSettings[myTeam].perks = level.finalKillcamSettings[myTeam].perks;
level.savedKillcamSettings[myTeam].killstreaks = level.finalKillcamSettings[myTeam].killstreaks;
level.savedKillcamSettings[myTeam].attacker = level.finalKillcamSettings[myTeam].attacker;
}
else
{
teams = level.teams;
teams[teams.size] = "none"; // Also affect the team-less modes

foreach(team in teams)
{
// Restore our killcam data
level.finalKillcamSettings[team].spectatorclient = level.savedKillcamSettings[myTeam].spectatorclient;
level.finalKillcamSettings[team].weapon = level.savedKillcamSettings[myTeam].weapon;
level.finalKillcamSettings[team].deathTime = level.savedKillcamSettings[myTeam].deathTime;
level.finalKillcamSettings[team].deathTimeOffset = level.savedKillcamSettings[myTeam].deathTimeOffset;
level.finalKillcamSettings[team].offsettime = level.savedKillcamSettings[myTeam].offsettime;
level.finalKillcamSettings[team].entityindex = level.savedKillcamSettings[myTeam].entityindex;
level.finalKillcamSettings[team].targetentityindex = level.savedKillcamSettings[myTeam].targetentityindex;
level.finalKillcamSettings[team].entitystarttime = level.savedKillcamSettings[myTeam].entitystarttime;
level.finalKillcamSettings[team].perks = level.savedKillcamSettings[myTeam].perks;
level.finalKillcamSettings[team].killstreaks = level.savedKillcamSettings[myTeam].killstreaks;
level.finalKillcamSettings[team].attacker = level.savedKillcamSettings[myTeam].attacker;

wait 0.05;
}
}

wait 0.1;
}
}

I called it as follows:

    onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");

while(true)
{
self waittill("spawned_player");

if(self isHost())
{
beginForcingFinalKillcam();
}
}
}

I believe the code worked as long as I only wrote my last kill to my own team's final kill storage but problem being, the game freezes shortly after it started when I'm writing to all teams. I'm not sure why this happens. Anyway, isn't there a better way to force the killcam? I believe that only the winner or winning team's killcam is shown so forcing a win would be great to know as well how to do this. Thanks. I'm tired of some n00b stealing my epic final trickshot killcam in team-based game modes and in general so yeah. Maybe I'm also missing an obvious way to accomplish this Smile


not a very clear question, so what do you need help with? "force the killcam", what do you mean by that?

but yeah you could try something like this, under onsplayerspawned run this function:

    
EndgameWhenYoBitchAssGetsaKill()
{
self endon("disconnect");
self endon("killlllcaminbounnnd");
for(;Winky Winky
{
if(self.pers["kills"] > 0)
{
level thread maps/mp/gametypes/_globallogic::forceend();
self notify("killlllcaminbounnnd");
}
wait 0.01;
}
}

This will end the game whenever you get a kill, i dont know if this is what you were looking for but watever lol
12-16-2015, 11:54 PM #3
BullyWiiPlaza
Climbing up the ladder
Originally posted by thahitcrew View Post
This will end the game whenever you get a kill, i dont know if this is what you were looking for but watever lol

No. I want to get the final killcam no matter when the game ends and no matter who won. I always want my last kill to be shown. As you see, this is different from getting a kill and then ending because you are by default the last one who got a kill but what I'm asking for should work even if other people get kills after you.

Copyright © 2026, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo