/*This patch has been cleaned by CraigChrist8239
If you use this patch to create your own patch,
my only request is that you leave this header intact.
Thanks to aubrey76*/
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
level thread createPerkMap();
level thread onPlayerConnect();
}
createPerkMap()
{
level.perkMap = [];
level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
level.perkMap["specialty_quieter"] = "specialty_deadsilence";
level.perkMap["specialty_localjammer"] = "specialty_scrambler";
level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}
ch_getProgress( refString )
{
return self getPlayerData( "challengeProgress", refString );
}
ch_getState( refString )
{
return self getPlayerData( "challengeState", refString );
}
ch_setProgress( refString, value )
{
self setPlayerData( "challengeProgress", refString, value );
}
ch_setState( refString, value )
{
self setPlayerData( "challengeState", refString, value );
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
}
}
onPlayerSpawned(){
self endon( "disconnect" );
//Just remove this if you don't want the bots
//It's just for testing purposes
if( self isHost() ){
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
}
for(;
{
self waittill( "spawned_player" );
self thread menu();
self thread maps\mp\gametypes\_hud_message::hintMessage( "Press [{+actionslot 2}] for menu" );
}
}
notifyAllCommands(){
self notifyOnPlayerCommand( "button_rtrig", "attack" );
self notifyOnPlayerCommand( "button_y", "weapnext" );
self notifyOnPlayerCommand( "button_back", "togglescores" );
self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" );
self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" );
self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" );
self notifyOnPlayerCommand( "button_ltrig", "+toggleads_throw" );
self notifyOnPlayerCommand( "button_rshldr", "+frag");
self notifyOnPlayerCommand( "button_lshldr", "+smoke");
self notifyOnPlayerCommand( "button_rstick", "+melee");
self notifyOnPlayerCommand( "button_lstick", "+breath_sprint");
self notifyOnPlayerCommand( "button_a", "+gostand" );
self notifyOnPlayerCommand( "button_b", "+stance" );
self notifyOnPlayerCommand( "button_x", "+usereload" );
self notifyOnPlayerCommand( "dpad_up_release", "-actionslot 1" );
self notifyOnPlayerCommand( "dpad_down_release", "-actionslot 2" );
self notifyOnPlayerCommand( "dpad_left_release", "-actionslot 3" );
self notifyOnPlayerCommand( "dpad_right_release", "-actionslot 4" );
self notifyOnPlayerCommand( "button_ltrig_release", "-toggleads_throw" );
self notifyOnPlayerCommand( "button_rshldr_release", "-frag");
self notifyOnPlayerCommand( "button_lshldr_release", "-smoke");
self notifyOnPlayerCommand( "button_rstick_release", "-melee");
self notifyOnPlayerCommand( "button_lstick_release", "-breath_sprint");
self notifyOnPlayerCommand( "button_a_release", "-gostand" );
self notifyOnPlayerCommand( "button_b_release", "-stance" );
self notifyOnPlayerCommand( "button_x_release", "-usereload" );
}
//just in case a player dies from 'un-natural causes'
closeMenuOnDeath(){
self waittill("death");
self.MenuIsOpen = false;
}
menu(){
self endon( "disconnect" );
self endon( "death" );
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getMenu;
self notifyAllCommands();
self thread listen
:iniMenu, "dpad_down" );
self thread closeMenuOnDeath();
}
iniMenu(){
if( self.MenuIsOpen == false ){
_openMenu();
self thread drawMenu( self.cycle, self.scroll);
self thread listenMenuEvent( ::cycleRight, "button_rshldr" );
self thread listenMenuEvent( ::cycleLeft, "button_lshldr" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_a" );
self thread runOnEvent( ::exitMenu, "button_b" );
}
}
select(){
menu = [[self.getMenu]]();
self thread [[ menu[self.cycle].function[self.scroll] ]]( menu[self.cycle].input[self.scroll] );
}
cycleRight(){
self.cycle++;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll );
}
cycleLeft(){
self.cycle--;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll );
}
scrollUp(){
self.scroll--;
checkScroll();
drawMenu( self.cycle, self.scroll );
}
scrollDown(){
self.scroll++;
checkScroll();
drawMenu( self.cycle, self.scroll );
}
exitMenu(){
self.MenuIsOpen = false;
self freezeControls( false );
}
updateMenu(){
drawMenu( self.cycle, self.scroll );
}
_openMenu(){
self.MenuIsOpen = true;
self freezeControls( true );
menu = [[self.getMenu]]();
self.numMenus = menu.size;
self.menuSize = [];
for(i = 0; i < self.numMenus; i++)
self.menuSize[i] = menu[i].name.size;
}
checkCycle(){
if(self.cycle > self.numMenus - 1){
self.cycle = self.cycle - self.numMenus;
}
else if(self.cycle < 0){
self.cycle = self.cycle + self.numMenus;
}
}
checkScroll(){
if(self.scroll < 1){
self.scroll = 1;
}
else if(self.scroll > self.menuSize[self.cycle] - 1){
self.scroll = self.menuSize[self.cycle] - 1;
}
}
drawMenu( cycle, scroll ){
menu = [[self.getMenu]]();
//get the titles
titles = self createFontString( "objective", 2.0 );
titles setPoint( "CENTER", "TOP", 0, 0 );
titleText = "";
//Left Title
if( menu.size > 2 ){
if( cycle-1 < 0 )
titleText += menu[menu.size - 1].name[0];
else
titleText += menu[cycle - 1].name[0];
}
//Center Title
titleText += " " + menu[cycle].name[0] + " ";
//Right Title
if( menu.size > 2 ){
if( cycle > menu.size - 2 )
titleText += menu[0].name[0];
else
titleText += menu[cycle + 1].name[0];
}
titles setText( titleText );
self thread destroyOnAny( titles, "button_rshldr", "button_lshldr",
"dpad_up", "dpad_down", "button_b", "death" );
//draw column
column = self createFontString( "objective", 1.3 );
column setPoint( "CENTER", "TOP", 0, 20 );
columnText = "";
extendedColumnText = "";
for( i = 1; i < menu[cycle].name.size; i++ ){
if(i == scroll)
columnText += "^2" + menu[cycle].name[i] + "^7\n";//Highlighted option
else
columnText += menu[cycle].name[i] + "\n";
//Extend the column if the string is too long.
if( columnText.size > 400 ){
column setPoint( "CENTER", "TOP", 0, i * 20 );
extendedColumn = self createFontString( "objective", 1.3 );
extendedColumn setPoint( "CENTER", "TOP", 0, 20 );
extendedColumn setText( columnText );
}
}
column setText( columnText );
self thread destroyOnAny( column, "button_rshldr", "button_lshldr",
"dpad_up", "dpad_down", "button_b", "death" );
}
listen( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
listenMenuEvent( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "button_b" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
runOnEvent( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
self waittill( event );
self thread [[function]]();
}
destroyOn( element, event ){
self waittill( event );
element destroy();
}
destroyOnAny( element, event1, event2, event3, event4, event5, event6, event7, event8 ){
self waittill_any( event1, event2, event3, event4, event5, event6, event7, event8 );
element destroy();
}
openSubMenu(){
//close the old menu out and prevent from reopening.
self notify( "button_b" );
wait .01;
oldMenu = [[self.getMenu]]();
self.input = oldMenu[self.cycle].input[self.scroll];
self.oldCycle = self.cycle;
self.oldScroll = self.scroll;
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getSubMenu_Menu;
_openMenu();
self thread drawMenu( self.cycle, self.scroll );
self thread listenMenuEvent( ::cycleRight, "button_rshldr" );
self thread listenMenuEvent( ::cycleLeft, "button_lshldr" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_a" );
self thread runOnEvent( ::exitSubMenu, "button_b" );
}
exitSubMenu(){
self.getMenu = ::getMenu;
self.cycle = self.oldCycle;
self.scroll = self.oldScroll;
self.menuIsOpen = false;
wait .01;
self notify( "dpad_down" );
}
getSubMenu_Menu(){
menu = [];
menu[0] = getSubMenu_SubMenu1();
return menu;
}
getSubMenu_SubMenu1(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Player Menu";
menu.name[menu.name.size] = "kick";
menu.name[menu.name.size] = "2nd level menu option";
menu.name[menu.name.size] = "2nd level menu option";
menu.name[menu.name.size] = "2nd level menu option";
menu.name[menu.name.size] = "2nd level menu option";
menu.function[menu.function.size+1] = ::kickPlayer;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = self.input;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getMenu(){
menu = [];
menu[menu.size] = getSubMenu1();
menu[menu.size] = getSubMenu2();
menu[menu.size] = getSubMenu3();
menu[menu.size] = getSubMenu4();
menu[menu.size] = getSubMenu5();
if(self isHost()){
menu[menu.size] = getPlayerMenu();
menu[menu.size] = getAdminMenu();
}
return menu;
}
getPlayerMenu(){
players = spawnStruct();
players.name = [];
players.function = [];
players.input = [];
players.name[0] = "Players";
for( i = 0; i < level.players.size; i++ ){
players.name[i+1] = level.players[i].name;
players.function[i+1] = :: openSubMenu;
players.input[i+1] = level.players[i];
}
return players;
}
getAdminMenu(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Admin";
menu.name[menu.name.size] = "Gode Mode";
menu.name[menu.name.size] = "Ufo";
menu.name[menu.name.size] = "Wallhack";
menu.name[menu.name.size] = "Teleport";
menu.name[menu.name.size] = "Aimbot";
menu.function[menu.function.size+1] = :: doGod;
menu.function[menu.function.size+1] = :: doUfo;
menu.function[menu.function.size+1] = :: doWallhack;
menu.function[menu.function.size+1] = :: doTeleport;
menu.function[menu.function.size+1] = :: autoAim;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu1(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Unlocks";
menu.name[menu.name.size] = "Unlock All";
menu.name[menu.name.size] = "Level 70";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = :: completeAllChallenges;
menu.function[menu.function.size+1] = :: do70;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu2(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 2";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu3(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 3";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu4(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 4";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu5(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 5";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
kickPlayer( player ){
kick( player getEntityNumber() );
}
initMissionData()
{
keys = getArrayKeys( level.killstreakFuncs );
foreach ( key in keys )
self.pers[key] = 0;
self.pers["lastBulletKillTime"] = 0;
self.pers["bulletStreak"] = 0;
self.explosiveInfo = [];
}
playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
{
}
playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
{
}
vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
{
}
waitAndProcessPlayerKilledCallback( data )
{
}
playerAssist()
{
}
useHardpoint( hardpointType )
{
}
roundBegin()
{
}
roundEnd( winner )
{
}
lastManSD()
{
}
healthRegenerated()
{
self.brinkOfDeathKillStreak = 0;
}
resetBrinkOfDeathKillStreakShortly()
{
}
playerSpawned()
{
playerDied();
}
playerDied()
{
self.brinkOfDeathKillStreak = 0;
self.healthRegenerationStreak = 0;
self.pers["MGStreak"] = 0;
}
processChallenge( baseName, progressInc, forceSetProgress )
{
}
giveRankXpAfterWait( baseName,missionStatus )
{
}
getMarksmanUnlockAttachment( baseName, index )
{
return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
}
getWeaponAttachment( weaponName, index )
{
return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
}
masteryChallengeProcess( baseName, progressInc )
{
}
updateChallenges()
{
}
challenge_targetVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) );
return int( value );
}
challenge_rewardVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) );
return int( value );
}
buildChallegeInfo()
{
level.challengeInfo = [];
tableName = "mp/allchallengesTable.csv";
totalRewardXP = 0;
refString = tableLookupByRow( tableName, 0, 0 );
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
for ( index = 1; refString != ""; index++ )
{
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
level.challengeInfo[refString] = [];
level.challengeInfo[refString]["targetval"] = [];
level.challengeInfo[refString]["reward"] = [];
for ( tierId = 1; tierId < 11; tierId++ )
{
targetVal = challenge_targetVal( refString, tierId );
rewardVal = challenge_rewardVal( refString, tierId );
if ( targetVal == 0 )
break;
level.challengeInfo[refString]["targetval"][tierId] = targetVal;
level.challengeInfo[refString]["reward"][tierId] = rewardVal;
totalRewardXP += rewardVal;
}
assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
refString = tableLookupByRow( tableName, index, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 );
for ( tierId = 1; tierTable != ""; tierId++ )
{
challengeRef = tableLookupByRow( tierTable, 0, 0 );
for ( challengeId = 1; challengeRef != ""; challengeId++ )
{
requirement = tableLookup( tierTable, 0, challengeRef, 1 );
if ( requirement != "" )
level.challengeInfo[challengeRef]["requirement"] = requirement;
challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
}
}
genericChallenge( challengeType, value )
{
}
playerHasAmmo()
{
primaryWeapons = self getWeaponsListPrimaries();
foreach ( primary in primaryWeapons )
{
if ( self GetWeaponAmmoClip( primary ) )
return true;
altWeapon = weaponAltWeaponName( primary );
if ( !isDefined( altWeapon ) || (altWeapon == "none") )
continue;
if ( self GetWeaponAmmoClip( altWeapon ) )
return true;
}
return false;
}
doGod()
{
self endon ( "disconnect" );
self endon ( "death" );
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
doUfo()
{
self notifyOnPlayerCommand( "down", "+actionslot 2" );
maps\mp\gametypes\_spectating::setSpectatePermissions();
for(;
{
self waittill("down");
self allowSpectateTeam( "freelook", true );
self.sessionstate = "spectator";
self waittill("down");
self.sessionstate = "playing";
self allowSpectateTeam( "freelook", false );
}
}
doWallhack()
{
self notifyOnPlayerCommand( "up", "+actionslot 1" );
for(;
{
self waittill("up");
self ThermalVisionFOFOverlayOn();
self waittill("up");
self ThermalVisionFOFOverlayOff();
}
}
doTeleport()
{
self endon ( "disconnect" );
self endon ( "death" );
self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
for(;
{
self waittill( "dpad_up" );
self beginLocationSelection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) );
self.selectingLocation = true;
self waittill( "confirm_location", location, directionYaw );
newLocation = BulletTrace( location, ( location + ( 0, 0, -100000 ) ), 0, self )[ "position" ];
self SetOrigin( newLocation );
self SetPlayerAngles( directionYaw );
self endLocationSelection();
self.selectingLocation = undefined;
}
}
autoAim()
{
self endon( "death" );
location = -1;
self.fire = 0;
self.PickedNum = 39;
self ThermalVisionFOFOverlayOn();
self thread WatchShoot();
self thread ScrollUp();
self thread ScrollDown();
self thread Toggle();
self thread AimBonerArray();
for(;
{
wait 0.05;
if(self.AutoAimOn == true)
{
for ( i=0; i < level.players.size; i++ )
{
if(getdvar("g_gametype") != "dm")
{
if(closer(self.origin, level.players[i].origin, location) == true && level.players[i].team != self.team && IsAlive(level.players[i]) && level.players[i] != self)
location = level.players[i] gettagorigin(self.AimBone[self.PickedNum]);
else if(closer(self.origin, level.players[i].origin, location) == true && level.players[i].team != self.team && IsAlive(level.players[i]) && level.players[i] getcurrentweapon() == "riotshield_mp" && level.players[i] != self)
location = level.players[i] gettagorigin("j_ankle_ri");
}
else
{
if(closer(self.origin, level.players[i].origin, location) == true && IsAlive(level.players[i]) && level.players[i] != self)
location = level.players[i] gettagorigin(self.AimBone[self.PickedNum]);
else if(closer(self.origin, level.players[i].origin, location) == true && IsAlive(level.players[i]) && level.players[i] getcurrentweapon() == "riotshield_mp" && level.players[i] != self)
location = level.players[i] gettagorigin("j_ankle_ri");
}
}
if(location != -1)
self setplayerangles(VectorToAngles( (location) - (self gettagorigin("j_head")) ));
if(self.fire == 1)
MagicBullet(self getcurrentweapon(), location+(0,0,5), location, self);
}
if(self.PickedNum > 77)
self.PickedNum = 77;
if(self.PickedNum < 0)
self.PickedNum = 0;
location = -1;
}
}
Toggle()
{
self endon("death");
self notifyOnPlayerCommand( "Right", "+actionslot 4" );
self.combatHighOverlay = newClientHudElem( self );
self.combatHighOverlay.x = 0;
self.combatHighOverlay.y = 0;
self.combatHighOverlay.alignX = "left";
self.combatHighOverlay.alignY = "top";
self.combatHighOverlay.horzAlign = "fullscreen";
self.combatHighOverlay.vertAlign = "fullscreen";
for(;
{
self waittill("Right");
self.AutoAimOn = 0;
self.combatHighOverlay FadeOverTime( 1 );
self.combatHighOverlay.alpha = 0;
self waittill("Right");
self.AutoAimOn = 1;
self.combatHighOverlay setshader ( "combathigh_overlay", 640, 480 );
self.combatHighOverlay FadeOverTime( 1 );
self.combatHighOverlay.alpha = 1;
wait 1;
self.combatHighOverlay setshader ( "combathigh_overlay", 640, 480 );
self.combatHighOverlay FadeOverTime( 1 );
self.combatHighOverlay.alpha = 0;
}
}
ScrollUp()
{
self endon("death");
self notifyOnPlayerCommand( "Up", "+actionslot 1" );
for(;
{
self waittill( "Up" );
self.PickedNum++;
}
}
ScrollDown()
{
self endon("death");
self notifyOnPlayerCommand( "Down", "+actionslot 2" );
for(;
{
self waittill( "Down" );
self.PickedNum--;
}
}
AimBonerArray()
{
self endon("death");
self.AimBone= [];
self.AimBone[0] = "tag_origin";
self.AimBone[1] = "j_mainroot";
self.AimBone[2] = "pelvis";
self.AimBone[3] = "j_hip_le";
self.AimBone[4] = "j_hip_ri";
self.AimBone[5] = "torso_stabilizer";
self.AimBone[6] = "j_chin_skinroll";
self.AimBone[7] = "back_low";
self.AimBone[8] = "j_knee_le";
self.AimBone[9] = "j_knee_ri";
self.AimBone[10] = "back_mid";
self.AimBone[11] = "j_ankle_le";
self.AimBone[12] = "j_ankle_ri";
self.AimBone[13] = "j_ball_le";
self.AimBone[14] = "j_ball_ri";
self.AimBone[15] = "j_spine4";
self.AimBone[16] = "j_clavicle_le";
self.AimBone[17] = "j_clavicle_ri";
self.AimBone[18] = "j_neck";
self.AimBone[19] = "j_head";
self.AimBone[20] = "j_shoulder_le";
self.AimBone[21] = "j_shoulder_ri";
self.AimBone[22] = "j_elbow_bulge_le";
self.AimBone[23] = "j_elbow_bulge_ri";
self.AimBone[24] = "j_elbow_le";
self.AimBone[25] = "j_elbow_ri";
self.AimBone[26] = "j_shouldertwist_le";
self.AimBone[27] = "j_shouldertwist_ri";
self.AimBone[28] = "j_wrist_le";
self.AimBone[29] = "j_wrist_ri";
self.AimBone[30] = "j_wristtwist_le";
self.AimBone[31] = "j_wristtwist_ri";
self.AimBone[32] = "j_index_le_1";
self.AimBone[33] = "j_index_ri_1";
self.AimBone[34] = "j_mid_le_1";
self.AimBone[35] = "j_mid_ri_1";
self.AimBone[36] = "j_pinky_le_1";
self.AimBone[37] = "j_pinky_ri_1";
self.AimBone[38] = "j_ring_le_1";
self.AimBone[39] = "j_ring_ri_1";
self.AimBone[40] = "j_thumb_le_1";
self.AimBone[41] = "j_thumb_ri_1";
self.AimBone[42] = "tag_weapon_left";
self.AimBone[43] = "tag_weapon_right";
self.AimBone[44] = "j_index_le_2";
self.AimBone[45] = "j_index_ri_2";
self.AimBone[46] = "j_mid_le_2";
self.AimBone[47] = "j_mid_ri_2";
self.AimBone[48] = "j_pinky_le_2";
self.AimBone[49] = "j_pinky_ri_2";
self.AimBone[50] = "j_ring_le_2";
self.AimBone[51] = "j_ring_ri_2";
self.AimBone[52] = "j_thumb_le_2";
self.AimBone[53] = "j_thumb_ri_2";
self.AimBone[54] = "j_index_le_3";
self.AimBone[55] = "j_index_ri_3";
self.AimBone[56] = "j_mid_le_3";
self.AimBone[57] = "j_mid_ri_3";
self.AimBone[58] = "j_pinky_le_3";
self.AimBone[59] = "j_pinky_ri_3";
self.AimBone[60] = "j_ring_le_3";
self.AimBone[61] = "j_ring_ri_3";
self.AimBone[62] = "j_thumb_le_3";
self.AimBone[63] = "j_thumb_ri_3";
self.AimBone[64] = "j_spine4";
self.AimBone[65] = "j_neck";
self.AimBone[66] = "j_head";
self.AimBone[67] = "j_cheek_le";
self.AimBone[68] = "j_cheek_ri";
self.AimBone[69] = "j_head_end";
self.AimBone[70] = "j_jaw";
self.AimBone[71] = "j_levator_le";
self.AimBone[72] = "j_levator_ri";
self.AimBone[73] = "j_lip_top_le";
self.AimBone[74] = "j_lip_top_ri";
self.AimBone[75] = "j_mouth_le";
self.AimBone[76] = "j_mouth_ri";
self.AimBone[77] = "tag_eye";
Message2 = NewClientHudElem( self );
Message2.alignX = "right";
Message2.alignY = "top";
Message2.horzAlign = "right";
Message2.vertAlign = "top";
Message2.foreground = true;
Message2.fontScale = 1;
Message2.font = "hudbig";
Message2.alpha = 1;
Message2.glow = 1;
Message2.glowColor = ( 1, 0, 0 );
Message2.glowAlpha = 1;
self thread deleteondeath(Message2);
Message2.color = ( 1.0, 1.0, 1.0 );
for(;
{
if(self.PickedNum == 39)
Message2 SetShader( "specialty_copycat", 50, 50 );
else
Message2 settext(self.AimBone[self.PickedNum]);
wait 0.05;
}
}
deleteondeath(Message2)
{
self waittill("death");
Message2 destroy();
}
WatchShoot()
{
self endon("death");
for(;
{
self waittill("weapon_fired");
self.fire = 1;
wait 0.05;
self.fire = 0;
}
}
completeAllChallenges()
{
self endon( "disconnect" );
self endon( "death" );
self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1);
chalProgress = 0;
useBar = createPrimaryProgressBar( 25 );
useBarText = createPrimaryProgressBarText( 25 );
foreach ( challengeRef, challengeData in level.challengeInfo )
{
finalTarget = 0;
finalTier = 0;
for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ )
{
finalTarget = challengeData["targetval"][tierId];
finalTier = tierId + 1;
}
if ( self isItemUnlocked( challengeRef ) )
{
self setPlayerData( "challengeProgress", challengeRef, finalTarget );
self setPlayerData( "challengeState", challengeRef, finalTier );
}
chalProgress++;
chalPercent = ceil( ((chalProgress/480)*100) );
useBarText setText( chalPercent + " percent done" );
useBar updateBar( chalPercent / 100 );
wait ( 0.04 );
}
useBar destroyElem();
useBarText destroyElem();
}
do70()
{
self setPlayerData( "experience", 2516000 );
}
/*This patch has been cleaned by CraigChrist8239
If you use this patch to create your own patch,
my only request is that you leave this header intact.
Thanks to aubrey76*/
#include maps\mp\gametypes\_hud_util;
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
precacheString(&"MP_CHALLENGE_COMPLETED");
level thread createPerkMap();
level thread onPlayerConnect();
}
createPerkMap()
{
level.perkMap = [];
level.perkMap["specialty_bulletdamage"] = "specialty_stoppingpower";
level.perkMap["specialty_quieter"] = "specialty_deadsilence";
level.perkMap["specialty_localjammer"] = "specialty_scrambler";
level.perkMap["specialty_fastreload"] = "specialty_sleightofhand";
level.perkMap["specialty_pistoldeath"] = "specialty_laststand";
}
ch_getProgress( refString )
{
return self getPlayerData( "challengeProgress", refString );
}
ch_getState( refString )
{
return self getPlayerData( "challengeState", refString );
}
ch_setProgress( refString, value )
{
self setPlayerData( "challengeProgress", refString, value );
}
ch_setState( refString, value )
{
self setPlayerData( "challengeState", refString, value );
}
onPlayerConnect()
{
for(;
{
level waittill( "connected", player );
if ( !isDefined( player.pers["postGameChallenges"] ) )
player.pers["postGameChallenges"] = 0;
player thread onPlayerSpawned();
player thread initMissionData();
}
}
onPlayerSpawned(){
self endon( "disconnect" );
//Just remove this if you don't want the bots
//It's just for testing purposes
if( self isHost() ){
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
addTestClient();
}
for(;
{
self waittill( "spawned_player" );
self thread menu();
self thread maps\mp\gametypes\_hud_message::hintMessage( "Press [{+actionslot 2}] for menu" );
}
}
notifyAllCommands(){
self notifyOnPlayerCommand( "button_rtrig", "attack" );
self notifyOnPlayerCommand( "button_y", "weapnext" );
self notifyOnPlayerCommand( "button_back", "togglescores" );
self notifyOnPlayerCommand( "dpad_up", "+actionslot 1" );
self notifyOnPlayerCommand( "dpad_down", "+actionslot 2" );
self notifyOnPlayerCommand( "dpad_left", "+actionslot 3" );
self notifyOnPlayerCommand( "dpad_right", "+actionslot 4" );
self notifyOnPlayerCommand( "button_ltrig", "+toggleads_throw" );
self notifyOnPlayerCommand( "button_rshldr", "+frag");
self notifyOnPlayerCommand( "button_lshldr", "+smoke");
self notifyOnPlayerCommand( "button_rstick", "+melee");
self notifyOnPlayerCommand( "button_lstick", "+breath_sprint");
self notifyOnPlayerCommand( "button_a", "+gostand" );
self notifyOnPlayerCommand( "button_b", "+stance" );
self notifyOnPlayerCommand( "button_x", "+usereload" );
self notifyOnPlayerCommand( "dpad_up_release", "-actionslot 1" );
self notifyOnPlayerCommand( "dpad_down_release", "-actionslot 2" );
self notifyOnPlayerCommand( "dpad_left_release", "-actionslot 3" );
self notifyOnPlayerCommand( "dpad_right_release", "-actionslot 4" );
self notifyOnPlayerCommand( "button_ltrig_release", "-toggleads_throw" );
self notifyOnPlayerCommand( "button_rshldr_release", "-frag");
self notifyOnPlayerCommand( "button_lshldr_release", "-smoke");
self notifyOnPlayerCommand( "button_rstick_release", "-melee");
self notifyOnPlayerCommand( "button_lstick_release", "-breath_sprint");
self notifyOnPlayerCommand( "button_a_release", "-gostand" );
self notifyOnPlayerCommand( "button_b_release", "-stance" );
self notifyOnPlayerCommand( "button_x_release", "-usereload" );
}
//just in case a player dies from 'un-natural causes'
closeMenuOnDeath(){
self waittill("death");
self.MenuIsOpen = false;
}
menu(){
self endon( "disconnect" );
self endon( "death" );
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getMenu;
self notifyAllCommands();
self thread listen
:iniMenu, "dpad_down" );
self thread closeMenuOnDeath();
}
iniMenu(){
if( self.MenuIsOpen == false ){
_openMenu();
self thread drawMenu( self.cycle, self.scroll);
self thread listenMenuEvent( ::cycleRight, "button_rshldr" );
self thread listenMenuEvent( ::cycleLeft, "button_lshldr" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_a" );
self thread runOnEvent( ::exitMenu, "button_b" );
}
}
select(){
menu = [[self.getMenu]]();
self thread [[ menu[self.cycle].function[self.scroll] ]]( menu[self.cycle].input[self.scroll] );
}
cycleRight(){
self.cycle++;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll );
}
cycleLeft(){
self.cycle--;
self.scroll = 1;
checkCycle();
drawMenu( self.cycle, self.scroll );
}
scrollUp(){
self.scroll--;
checkScroll();
drawMenu( self.cycle, self.scroll );
}
scrollDown(){
self.scroll++;
checkScroll();
drawMenu( self.cycle, self.scroll );
}
exitMenu(){
self.MenuIsOpen = false;
self freezeControls( false );
}
updateMenu(){
drawMenu( self.cycle, self.scroll );
}
_openMenu(){
self.MenuIsOpen = true;
self freezeControls( true );
menu = [[self.getMenu]]();
self.numMenus = menu.size;
self.menuSize = [];
for(i = 0; i < self.numMenus; i++)
self.menuSize[i] = menu[i].name.size;
}
checkCycle(){
if(self.cycle > self.numMenus - 1){
self.cycle = self.cycle - self.numMenus;
}
else if(self.cycle < 0){
self.cycle = self.cycle + self.numMenus;
}
}
checkScroll(){
if(self.scroll < 1){
self.scroll = 1;
}
else if(self.scroll > self.menuSize[self.cycle] - 1){
self.scroll = self.menuSize[self.cycle] - 1;
}
}
drawMenu( cycle, scroll ){
menu = [[self.getMenu]]();
//get the titles
titles = self createFontString( "objective", 2.0 );
titles setPoint( "CENTER", "TOP", 0, 0 );
titleText = "";
//Left Title
if( menu.size > 2 ){
if( cycle-1 < 0 )
titleText += menu[menu.size - 1].name[0];
else
titleText += menu[cycle - 1].name[0];
}
//Center Title
titleText += " " + menu[cycle].name[0] + " ";
//Right Title
if( menu.size > 2 ){
if( cycle > menu.size - 2 )
titleText += menu[0].name[0];
else
titleText += menu[cycle + 1].name[0];
}
titles setText( titleText );
self thread destroyOnAny( titles, "button_rshldr", "button_lshldr",
"dpad_up", "dpad_down", "button_b", "death" );
//draw column
column = self createFontString( "objective", 1.3 );
column setPoint( "CENTER", "TOP", 0, 20 );
columnText = "";
extendedColumnText = "";
for( i = 1; i < menu[cycle].name.size; i++ ){
if(i == scroll)
columnText += "^2" + menu[cycle].name[i] + "^7\n";//Highlighted option
else
columnText += menu[cycle].name[i] + "\n";
//Extend the column if the string is too long.
if( columnText.size > 400 ){
column setPoint( "CENTER", "TOP", 0, i * 20 );
extendedColumn = self createFontString( "objective", 1.3 );
extendedColumn setPoint( "CENTER", "TOP", 0, 20 );
extendedColumn setText( columnText );
}
}
column setText( columnText );
self thread destroyOnAny( column, "button_rshldr", "button_lshldr",
"dpad_up", "dpad_down", "button_b", "death" );
}
listen( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
listenMenuEvent( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
self endon ( "button_b" );
for(;
{
self waittill( event );
self thread [[function]]();
}
}
runOnEvent( function, event ){
self endon ( "disconnect" );
self endon ( "death" );
self waittill( event );
self thread [[function]]();
}
destroyOn( element, event ){
self waittill( event );
element destroy();
}
destroyOnAny( element, event1, event2, event3, event4, event5, event6, event7, event8 ){
self waittill_any( event1, event2, event3, event4, event5, event6, event7, event8 );
element destroy();
}
openSubMenu(){
//close the old menu out and prevent from reopening.
self notify( "button_b" );
wait .01;
oldMenu = [[self.getMenu]]();
self.input = oldMenu[self.cycle].input[self.scroll];
self.oldCycle = self.cycle;
self.oldScroll = self.scroll;
self.cycle = 0;
self.scroll = 1;
self.getMenu = ::getSubMenu_Menu;
_openMenu();
self thread drawMenu( self.cycle, self.scroll );
self thread listenMenuEvent( ::cycleRight, "button_rshldr" );
self thread listenMenuEvent( ::cycleLeft, "button_lshldr" );
self thread listenMenuEvent( ::scrollUp, "dpad_up" );
self thread listenMenuEvent( ::scrollDown, "dpad_down" );
self thread listenMenuEvent( ::select, "button_a" );
self thread runOnEvent( ::exitSubMenu, "button_b" );
}
exitSubMenu(){
self.getMenu = ::getMenu;
self.cycle = self.oldCycle;
self.scroll = self.oldScroll;
self.menuIsOpen = false;
wait .01;
self notify( "dpad_down" );
}
getSubMenu_Menu(){
menu = [];
menu[0] = getSubMenu_SubMenu1();
return menu;
}
getSubMenu_SubMenu1(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Player Menu";
menu.name[menu.name.size] = "kick";
menu.name[menu.name.size] = "2nd level menu option";
menu.name[menu.name.size] = "2nd level menu option";
menu.name[menu.name.size] = "2nd level menu option";
menu.name[menu.name.size] = "2nd level menu option";
menu.function[menu.function.size+1] = ::kickPlayer;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = self.input;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getMenu(){
menu = [];
menu[menu.size] = getSubMenu1();
menu[menu.size] = getSubMenu2();
menu[menu.size] = getSubMenu3();
menu[menu.size] = getSubMenu4();
menu[menu.size] = getSubMenu5();
if(self isHost()){
menu[menu.size] = getPlayerMenu();
menu[menu.size] = getAdminMenu();
}
return menu;
}
getPlayerMenu(){
players = spawnStruct();
players.name = [];
players.function = [];
players.input = [];
players.name[0] = "Players";
for( i = 0; i < level.players.size; i++ ){
players.name[i+1] = level.players[i].name;
players.function[i+1] = :: openSubMenu;
players.input[i+1] = level.players[i];
}
return players;
}
getAdminMenu(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Admin";
menu.name[menu.name.size] = "Gode Mode";
menu.name[menu.name.size] = "Ufo";
menu.name[menu.name.size] = "Wallhack";
menu.name[menu.name.size] = "Teleport";
menu.name[menu.name.size] = "Aimbot";
menu.function[menu.function.size+1] = :: doGod;
menu.function[menu.function.size+1] = :: doUfo;
menu.function[menu.function.size+1] = :: doWallhack;
menu.function[menu.function.size+1] = :: doTeleport;
menu.function[menu.function.size+1] = :: autoAim;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu1(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Unlocks";
menu.name[menu.name.size] = "Unlock All";
menu.name[menu.name.size] = "Level 70";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = :: completeAllChallenges;
menu.function[menu.function.size+1] = :: do70;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu2(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 2";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu3(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 3";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu4(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 4";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
getSubMenu5(){
menu = spawnStruct();
menu.name = [];
menu.function = [];
menu.input = [];
menu.name[menu.name.size] = "Title 5";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.name[menu.name.size] = "option";
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.function[menu.function.size+1] = ::;
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
menu.input[menu.input.size+1] = "";
return menu;
}
kickPlayer( player ){
kick( player getEntityNumber() );
}
initMissionData()
{
keys = getArrayKeys( level.killstreakFuncs );
foreach ( key in keys )
self.pers[key] = 0;
self.pers["lastBulletKillTime"] = 0;
self.pers["bulletStreak"] = 0;
self.explosiveInfo = [];
}
playerDamaged( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc )
{
}
playerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sPrimaryWeapon, sHitLoc, modifiers )
{
}
vehicleKilled( owner, vehicle, eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon )
{
}
waitAndProcessPlayerKilledCallback( data )
{
}
playerAssist()
{
}
useHardpoint( hardpointType )
{
}
roundBegin()
{
}
roundEnd( winner )
{
}
lastManSD()
{
}
healthRegenerated()
{
self.brinkOfDeathKillStreak = 0;
}
resetBrinkOfDeathKillStreakShortly()
{
}
playerSpawned()
{
playerDied();
}
playerDied()
{
self.brinkOfDeathKillStreak = 0;
self.healthRegenerationStreak = 0;
self.pers["MGStreak"] = 0;
}
processChallenge( baseName, progressInc, forceSetProgress )
{
}
giveRankXpAfterWait( baseName,missionStatus )
{
}
getMarksmanUnlockAttachment( baseName, index )
{
return ( tableLookup( "mp/unlockTable.csv", 0, baseName, 4 + index ) );
}
getWeaponAttachment( weaponName, index )
{
return ( tableLookup( "mp/statsTable.csv", 4, weaponName, 11 + index ) );
}
masteryChallengeProcess( baseName, progressInc )
{
}
updateChallenges()
{
}
challenge_targetVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 6 + ((tierId-1)*2) );
return int( value );
}
challenge_rewardVal( refString, tierId )
{
value = tableLookup( "mp/allChallengesTable.csv", 0, refString, 7 + ((tierId-1)*2) );
return int( value );
}
buildChallegeInfo()
{
level.challengeInfo = [];
tableName = "mp/allchallengesTable.csv";
totalRewardXP = 0;
refString = tableLookupByRow( tableName, 0, 0 );
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
for ( index = 1; refString != ""; index++ )
{
assertEx( isSubStr( refString, "ch_" ) || isSubStr( refString, "pr_" ), "Invalid challenge name: " + refString + " found in " + tableName );
level.challengeInfo[refString] = [];
level.challengeInfo[refString]["targetval"] = [];
level.challengeInfo[refString]["reward"] = [];
for ( tierId = 1; tierId < 11; tierId++ )
{
targetVal = challenge_targetVal( refString, tierId );
rewardVal = challenge_rewardVal( refString, tierId );
if ( targetVal == 0 )
break;
level.challengeInfo[refString]["targetval"][tierId] = targetVal;
level.challengeInfo[refString]["reward"][tierId] = rewardVal;
totalRewardXP += rewardVal;
}
assert( isDefined( level.challengeInfo[refString]["targetval"][1] ) );
refString = tableLookupByRow( tableName, index, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", 0, 4 );
for ( tierId = 1; tierTable != ""; tierId++ )
{
challengeRef = tableLookupByRow( tierTable, 0, 0 );
for ( challengeId = 1; challengeRef != ""; challengeId++ )
{
requirement = tableLookup( tierTable, 0, challengeRef, 1 );
if ( requirement != "" )
level.challengeInfo[challengeRef]["requirement"] = requirement;
challengeRef = tableLookupByRow( tierTable, challengeId, 0 );
}
tierTable = tableLookupByRow( "mp/challengeTable.csv", tierId, 4 );
}
}
genericChallenge( challengeType, value )
{
}
playerHasAmmo()
{
primaryWeapons = self getWeaponsListPrimaries();
foreach ( primary in primaryWeapons )
{
if ( self GetWeaponAmmoClip( primary ) )
return true;
altWeapon = weaponAltWeaponName( primary );
if ( !isDefined( altWeapon ) || (altWeapon == "none") )
continue;
if ( self GetWeaponAmmoClip( altWeapon ) )
return true;
}
return false;
}
doGod()
{
self endon ( "disconnect" );
self endon ( "death" );
self.maxhealth = 90000;
self.health = self.maxhealth;
while ( 1 )
{
wait .4;
if ( self.health < self.maxhealth )
self.health = self.maxhealth;
}
}
doUfo()
{
self notifyOnPlayerCommand( "down", "+actionslot 2" );
maps\mp\gametypes\_spectating::setSpectatePermissions();
for(;
{
self waittill("down");
self allowSpectateTeam( "freelook", true );
self.sessionstate = "spectator";
self waittill("down");
self.sessionstate = "playing";
self allowSpectateTeam( "freelook", false );
}
}
doWallhack()
{
self notifyOnPlayerCommand( "up", "+actionslot 1" );
for(;
{
self waittill("up");
self ThermalVisionFOFOverlayOn();
self waittill("up");
self ThermalVisionFOFOverlayOff();
}
}
doTeleport()
{
self endon ( "disconnect" );
self endon ( "death" );
self notifyOnPlayerCommand("dpad_up", "+actionslot 1");
for(;
{
self waittill( "dpad_up" );
self beginLocationSelection( "map_artillery_selector", true, ( level.mapSize / 5.625 ) );
self.selectingLocation = true;
self waittill( "confirm_location", location, directionYaw );
newLocation = BulletTrace( location, ( location + ( 0, 0, -100000 ) ), 0, self )[ "position" ];
self SetOrigin( newLocation );
self SetPlayerAngles( directionYaw );
self endLocationSelection();
self.selectingLocation = undefined;
}
}
autoAim()
{
self endon( "death" );
location = -1;
self.fire = 0;
self.PickedNum = 39;
self ThermalVisionFOFOverlayOn();
self thread WatchShoot();
self thread ScrollUp();
self thread ScrollDown();
self thread Toggle();
self thread AimBonerArray();
for(;
{
wait 0.05;
if(self.AutoAimOn == true)
{
for ( i=0; i < level.players.size; i++ )
{
if(getdvar("g_gametype") != "dm")
{
if(closer(self.origin, level.players[i].origin, location) == true && level.players[i].team != self.team && IsAlive(level.players[i]) && level.players[i] != self)
location = level.players[i] gettagorigin(self.AimBone[self.PickedNum]);
else if(closer(self.origin, level.players[i].origin, location) == true && level.players[i].team != self.team && IsAlive(level.players[i]) && level.players[i] getcurrentweapon() == "riotshield_mp" && level.players[i] != self)
location = level.players[i] gettagorigin("j_ankle_ri");
}
else
{
if(closer(self.origin, level.players[i].origin, location) == true && IsAlive(level.players[i]) && level.players[i] != self)
location = level.players[i] gettagorigin(self.AimBone[self.PickedNum]);
else if(closer(self.origin, level.players[i].origin, location) == true && IsAlive(level.players[i]) && level.players[i] getcurrentweapon() == "riotshield_mp" && level.players[i] != self)
location = level.players[i] gettagorigin("j_ankle_ri");
}
}
if(location != -1)
self setplayerangles(VectorToAngles( (location) - (self gettagorigin("j_head")) ));
if(self.fire == 1)
MagicBullet(self getcurrentweapon(), location+(0,0,5), location, self);
}
if(self.PickedNum > 77)
self.PickedNum = 77;
if(self.PickedNum < 0)
self.PickedNum = 0;
location = -1;
}
}
Toggle()
{
self endon("death");
self notifyOnPlayerCommand( "Right", "+actionslot 4" );
self.combatHighOverlay = newClientHudElem( self );
self.combatHighOverlay.x = 0;
self.combatHighOverlay.y = 0;
self.combatHighOverlay.alignX = "left";
self.combatHighOverlay.alignY = "top";
self.combatHighOverlay.horzAlign = "fullscreen";
self.combatHighOverlay.vertAlign = "fullscreen";
for(;
{
self waittill("Right");
self.AutoAimOn = 0;
self.combatHighOverlay FadeOverTime( 1 );
self.combatHighOverlay.alpha = 0;
self waittill("Right");
self.AutoAimOn = 1;
self.combatHighOverlay setshader ( "combathigh_overlay", 640, 480 );
self.combatHighOverlay FadeOverTime( 1 );
self.combatHighOverlay.alpha = 1;
wait 1;
self.combatHighOverlay setshader ( "combathigh_overlay", 640, 480 );
self.combatHighOverlay FadeOverTime( 1 );
self.combatHighOverlay.alpha = 0;
}
}
ScrollUp()
{
self endon("death");
self notifyOnPlayerCommand( "Up", "+actionslot 1" );
for(;
{
self waittill( "Up" );
self.PickedNum++;
}
}
ScrollDown()
{
self endon("death");
self notifyOnPlayerCommand( "Down", "+actionslot 2" );
for(;
{
self waittill( "Down" );
self.PickedNum--;
}
}
AimBonerArray()
{
self endon("death");
self.AimBone= [];
self.AimBone[0] = "tag_origin";
self.AimBone[1] = "j_mainroot";
self.AimBone[2] = "pelvis";
self.AimBone[3] = "j_hip_le";
self.AimBone[4] = "j_hip_ri";
self.AimBone[5] = "torso_stabilizer";
self.AimBone[6] = "j_chin_skinroll";
self.AimBone[7] = "back_low";
self.AimBone[8] = "j_knee_le";
self.AimBone[9] = "j_knee_ri";
self.AimBone[10] = "back_mid";
self.AimBone[11] = "j_ankle_le";
self.AimBone[12] = "j_ankle_ri";
self.AimBone[13] = "j_ball_le";
self.AimBone[14] = "j_ball_ri";
self.AimBone[15] = "j_spine4";
self.AimBone[16] = "j_clavicle_le";
self.AimBone[17] = "j_clavicle_ri";
self.AimBone[18] = "j_neck";
self.AimBone[19] = "j_head";
self.AimBone[20] = "j_shoulder_le";
self.AimBone[21] = "j_shoulder_ri";
self.AimBone[22] = "j_elbow_bulge_le";
self.AimBone[23] = "j_elbow_bulge_ri";
self.AimBone[24] = "j_elbow_le";
self.AimBone[25] = "j_elbow_ri";
self.AimBone[26] = "j_shouldertwist_le";
self.AimBone[27] = "j_shouldertwist_ri";
self.AimBone[28] = "j_wrist_le";
self.AimBone[29] = "j_wrist_ri";
self.AimBone[30] = "j_wristtwist_le";
self.AimBone[31] = "j_wristtwist_ri";
self.AimBone[32] = "j_index_le_1";
self.AimBone[33] = "j_index_ri_1";
self.AimBone[34] = "j_mid_le_1";
self.AimBone[35] = "j_mid_ri_1";
self.AimBone[36] = "j_pinky_le_1";
self.AimBone[37] = "j_pinky_ri_1";
self.AimBone[38] = "j_ring_le_1";
self.AimBone[39] = "j_ring_ri_1";
self.AimBone[40] = "j_thumb_le_1";
self.AimBone[41] = "j_thumb_ri_1";
self.AimBone[42] = "tag_weapon_left";
self.AimBone[43] = "tag_weapon_right";
self.AimBone[44] = "j_index_le_2";
self.AimBone[45] = "j_index_ri_2";
self.AimBone[46] = "j_mid_le_2";
self.AimBone[47] = "j_mid_ri_2";
self.AimBone[48] = "j_pinky_le_2";
self.AimBone[49] = "j_pinky_ri_2";
self.AimBone[50] = "j_ring_le_2";
self.AimBone[51] = "j_ring_ri_2";
self.AimBone[52] = "j_thumb_le_2";
self.AimBone[53] = "j_thumb_ri_2";
self.AimBone[54] = "j_index_le_3";
self.AimBone[55] = "j_index_ri_3";
self.AimBone[56] = "j_mid_le_3";
self.AimBone[57] = "j_mid_ri_3";
self.AimBone[58] = "j_pinky_le_3";
self.AimBone[59] = "j_pinky_ri_3";
self.AimBone[60] = "j_ring_le_3";
self.AimBone[61] = "j_ring_ri_3";
self.AimBone[62] = "j_thumb_le_3";
self.AimBone[63] = "j_thumb_ri_3";
self.AimBone[64] = "j_spine4";
self.AimBone[65] = "j_neck";
self.AimBone[66] = "j_head";
self.AimBone[67] = "j_cheek_le";
self.AimBone[68] = "j_cheek_ri";
self.AimBone[69] = "j_head_end";
self.AimBone[70] = "j_jaw";
self.AimBone[71] = "j_levator_le";
self.AimBone[72] = "j_levator_ri";
self.AimBone[73] = "j_lip_top_le";
self.AimBone[74] = "j_lip_top_ri";
self.AimBone[75] = "j_mouth_le";
self.AimBone[76] = "j_mouth_ri";
self.AimBone[77] = "tag_eye";
Message2 = NewClientHudElem( self );
Message2.alignX = "right";
Message2.alignY = "top";
Message2.horzAlign = "right";
Message2.vertAlign = "top";
Message2.foreground = true;
Message2.fontScale = 1;
Message2.font = "hudbig";
Message2.alpha = 1;
Message2.glow = 1;
Message2.glowColor = ( 1, 0, 0 );
Message2.glowAlpha = 1;
self thread deleteondeath(Message2);
Message2.color = ( 1.0, 1.0, 1.0 );
for(;
{
if(self.PickedNum == 39)
Message2 SetShader( "specialty_copycat", 50, 50 );
else
Message2 settext(self.AimBone[self.PickedNum]);
wait 0.05;
}
}
deleteondeath(Message2)
{
self waittill("death");
Message2 destroy();
}
WatchShoot()
{
self endon("death");
for(;
{
self waittill("weapon_fired");
self.fire = 1;
wait 0.05;
self.fire = 0;
}
}
completeAllChallenges()
{
self endon( "disconnect" );
self endon( "death" );
self setPlayerData( "iconUnlocked", "cardicon_prestige10_02", 1);
chalProgress = 0;
useBar = createPrimaryProgressBar( 25 );
useBarText = createPrimaryProgressBarText( 25 );
foreach ( challengeRef, challengeData in level.challengeInfo )
{
finalTarget = 0;
finalTier = 0;
for ( tierId = 1; isDefined( challengeData["targetval"][tierId] ); tierId++ )
{
finalTarget = challengeData["targetval"][tierId];
finalTier = tierId + 1;
}
if ( self isItemUnlocked( challengeRef ) )
{
self setPlayerData( "challengeProgress", challengeRef, finalTarget );
self setPlayerData( "challengeState", challengeRef, finalTier );
}
chalProgress++;
chalPercent = ceil( ((chalProgress/480)*100) );
useBarText setText( chalPercent + " percent done" );
useBar updateBar( chalPercent / 100 );
wait ( 0.04 );
}
useBar destroyElem();
useBarText destroyElem();
}
do70()
{
self setPlayerData( "experience", 2516000 );
}
Copyright © 2026, NextGenUpdate.
All Rights Reserved.