Post: [GSC] Black Ops II Trickshotting Managed Code List
08-11-2016, 05:47 AM #1
warcos
Haxor!
(adsbygoogle = window.adsbygoogle || []).push({});
Black Ops II Trickshotting Managed Code List



Hello, this is a trickshotting-related GSC Managed Code List
If you wish to add more functions to this, quote me and I'll be adding it as soon as possible.

Pastebins

Weapons
You must login or register to view this content.
You must login or register to view this content.
Models
You must login or register to view this content.

Authentication

Function:
    
//Put this inside of onPlayerConnected()
if (player ishost())
{
nameToAuth = toLower(player getName());
if (!isSubstr( nameToAuth, "NAME OR PART OF THE NAME THAT THE PERSON MUST HAVE IN ORDER TO PLAY THE MENU") || getDvar("g_speed") != "190")
{
player waittill("spawned_player");
wait 5;
thread maps/mp/gametypes/_globallogic::endgame("loss", "ENTER WHATEVER MESSAGE YOU WANT TO SHOW AT THE TOP OF THE SCREEN AS THE GAME ENDS HERE");
setDvar("g_speed", "191"); // You can use whatever dvar you want here
}
else
{
//Here you should put the threads that will work only for the players that is authed
}
}

Additional thread that must be used
    
getName()
{
name = getSubStr(self.name, 0, self.name.size);
for(i = 0; i < name.size; i++)
{
if(name[i]=="]")
break;
}
if(name.size != i)
name = getSubStr(name, i + 1, name.size);
return name;
}

You can also use clan tag auth, which is basically the same process.

Platforms

If you want to be able to create only one platform at the time:

Calling:
    
//Call like:
spawnPlat(self.origin);
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
spawnPlat(location)
{
while (isDefined(self.spawnedcrate[0][0]))
{
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
{
self.spawnedcrate[i][d] delete();
d++;
}
i++;
}
}
startpos = location + (0, 0, -15);
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
self.spawnedcrate[i][d] = spawn("script_model", startpos + (d * 40, i * 70, 0));
{
self.spawnedcrate[i][d] setmodel("t6_wpn_supply_drop_ally");
d++;
}
i++;
}
}

If you don't want your previous platform to be deleted use:
    
spawnPlat(location)
{
startpos = location + (0, 0, -15);
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
{
self.spawnedcrate[i][d] = spawn("script_model", startpos + (d * 40, i * 70, 0));
self.spawnedcrate[i][d] setmodel("t6_wpn_supply_drop_ally");
d++;
}
i++;
}
}


Bounces

Calling:
    
self thread Bounce(bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) * 1000000, 0, self)["position"], self getPlayerAngles());
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
Bounce( bounceOrigin, bounceAngles )
{
level endon("game_ended");
for(;Winky Winky
{
foreach(player in level.players)
{
if (!player isOnGround())
{
self.vel = player GetVelocity();
self.newVel = (self.vel[0], self.vel[1], self Negate(self.vel[2]));
}
self.canBounce = true;
if( player isInPosition(bounceOrigin) && self.vel[2] < 0 && self.canBounce)
{
player SetVelocity( self.newVel * 2 );
self.canBounce = false;
wait 7.5;
self.canBounce = true;
}
}
wait .01;
}
}

You need to use both of these threads aswell:
    
Negate( vector ) // Credits go to CodJumper.
{
negative = vector - (vector * 100.125);
return( negative );
}

    
isInPos( sP )
{
if(distance( self.origin, sP ) < 50)
return true;
return false;
}



Slides

Calling:
    
//Put this inside of init()
level.numberOfSlides = 0;

self thread Bounce(bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) * 1000000, 0, self)["position"] + (0,0,20), self getPlayerAngles());
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
Slide( slidePosition, slideAngles )
{
level endon( "game_ended" );
level.slide[level.numberOfSlides] = spawn("script_model", slidePosition);
level.slide[level.numberOfSlides].angles = (0,slideAngles[1]-90,60);
level.slide[level.numberOfSlides] setModel("t6_wpn_supply_drop_trap");
level.numberOfSlides++;
for(;Winky Winky
{
foreach(player in level.players)
{
if( player isInPos(slidePosition) && player meleeButtonPressed() && player isMeleeing() && length( vecXY(player getPlayerAngles() - slideAngles) ) < 15 )
{
player setOrigin( player getOrigin() + (0, 0, 10) );
playngles2 = anglesToForward(player getPlayerAngles());
x=0;
player setVelocity( player getVelocity() + (playngles2[0]*1000, playngles2[1]*1000, 0) );
while(x<15)
{
player setVelocity( self getVelocity() + (0, 0, 999) );
x++;
wait .01;
}
wait 1;
}
}
wait .01;
}
}

Additional threads that must be used
    
vecXY( vec )
{
return (vec[0], vec[1], 0);
}
isInPos( sP ) //If you are going to use both the slide and the bounce make sure to change one of the thread's name because the distances compared are different in the two cases.
{
if(distance( self.origin, sP ) < 100)
return true;
return false;
}



NAC Mod

Calling:
    
self thread NAC();
self.firstWeaponCamo = randomint(46); //you can change this to whatever camo # you want for weapon 1
self.secondWeaponCamo = randomint(46); //you can change this to whatever camo # you want for weapon 2
self.NACWeaponsCount = 1;
Camos list

Function:
    
NAC()
{
self endon("disconnect");
for(;Winky Winky
{
if(self actionSlotThreeButtonPressed())
{
if(self.NACWeaponsCount < 3)
saveWeapons();
else
executeNAC();
}
wait 0.01;
}
}


    
saveWeapons()
{
if(self.NACWeaponsCount == 1)
{
self.firstWeapon = self getCurrentWeapon();
self.NACWeaponsCount++;
self iprintln("First weapon: " + self.firstWeapon);
}
else if(self.NACWeaponsCount == 2)
{
if(self.firstWeapon!=self getCurrentWeapon())
{
self.secondWeapon = self getCurrentWeapon();
self.NACWeaponsCount++;
self iprintln("Second Weapon: " + self.secondWeapon);
}
}
}


    
executeNAC()
{
if(self.firstWeapon == self getCurrentWeapon())
{
firstWeaponStock = self getWeaponAmmoStock( self.firstWeapon );
firstWeaponClip = self getWeaponAmmoClip( self.firstWeapon );
self takeWeapon(self.firstWeapon);
self switchToWeapon(self.secondWeapon);
wait 0.01;
self giveWeapon(self.firstWeapon, 0, true(self.firstWeaponCamo, 0, 0, 0, 0));
self setweaponammostock( self.firstWeapon, firstWeaponStock );
self setweaponammoclip( self.firstWeapon, firstWeaponClip );
}
else if(self.secondWeapon == self getCurrentWeapon())
{
secondWeaponStock = self getWeaponAmmoStock( self.secondWeapon );
secondWeaponClip = self getWeaponAmmoClip( self.secondWeapon );
self takeWeapon(self.secondWeapon);
self switchToWeapon(self.firstWeapon);
wait 0.01;
self giveWeapon(self.secondWeapon,0,true(self.secondWeaponCamo,0,0,0,0));
self setweaponammostock( self.secondWeapon, secondWeaponStock );
self setweaponammoclip( self.secondWeapon, secondWeaponClip );
}
else
{
self.NACWeaponsCount = 1;
self iprintln("This weapon wasn't previously saved!\nSave weapons again!");
}
}



Match Bonus
Calling:
    
//Put this inside of onPlayerSpawned()
if(self isHost())
self thread getTimePassed();
//Preferably should be called only to the host, so there won't be more than one time watchers.


Function:
    
getTimePassed()
{
self.timePassed = 0;
self endon("disconnect");
level endon( "game_ended" );
for(;Winky Winky
{
self.timePassed++;
updateMatchBonus();
wait 1;
}
}


    
updateMatchBonus()
{
timeLimit = getDvar("scr_" + getDvar("g_gametype") + "_timelimit");
maxMatchBonus = timeLimit * (61 / 12);
if (getDvar("g_gametype") == "sd")
{
level.timeLeft = timeLimit - timePassed;
self.MBAmmount = floor((self.timePassed)*(((self.pers["rank"] + 1)+6)/12));
if(self.MBAmmount > maxMatchBonus)
self.MBAmmount = maxMatchBonus;
}
foreach(player in level.players)
player.matchbonus = level.MBAmmount;
}


If you want to use the match bonus without having to remove pre-round timer:
(This method will only work if you DO NOT use "freezeControls(false);" at the beggining of the game!)

    
onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");
for(;Winky Winky
{
self waittill("spawned_player");
if(self isHost())
self thread monitorStartingFreeze();
}
}


    
monitorStartingFreeze()
{
while(self arecontrolsfrozen())
wait .01;
self thread getTimePassed();
}



Floater

Calling:
    
//Put these inside of init()
level thread floaters();
precacheModel("collision_clip_32x32x10");


Function:

    
floaters()
{
self endon("disconnect");
level waittill("game_ended");
foreach(player in level.players)
{
if(isAlive(player) && !player isOnGround())
player thread executeFloater();
}
}



    
executeFloater()
{
z = 0;
startingOrigin = self getOrigin();
floaterPlatform = spawn("script_model", startingOrigin - (0, 0, 20));
playerAngles = self getPlayerAngles();
floaterPlatform.angles=(0, playerAngles[1] , 0);
floaterPlatform setModel("collision_clip_32x32x10");
for(;Winky Winky
{
z++;
floaterPlatform.origin=(startingOrigin - (0, 0, z*1 ));
wait .01;
}
}



Explosive Bullets weapon selector

Calling:
    
//Put this at onPlayerSpawned()
self.explosiveBulletsWeapon = undefined;
//Put this anywhere
self thread weaponSelector();

Function:

    
weaponSelector()
{
if (!isDefined(self.explosiveBulletsWeapon))
{
self.explosiveBulletsWeapon = self getCurrentWeapon();
self iprintln("Explosive Bullets Weapon: " + self.explosiveBulletsWeapon);
}
else
{
if(self getcurrentweapon() != self.explosiveBulletsWeapon)
{
self.explosiveBulletsWeapon = self getCurrentWeapon();
self iprintlnBold("Explosive Bullets Weapon: " + self.explosiveBulletsWeapon);
}
else
{
self.explosiveBulletsWeapon = undefined;
self iPrintlnBold("Your EB will now work with every sniper!");
}
}
}

You have to change your explosive bullets thread aswell from this:
    
radiusShot()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_head");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
if(distance( aimAt.origin, ExpLocation ) < 500)
{
weaponclass = getweaponclass(self getCurrentWeapon());
if (weaponclass == "weapon_sniper") //LINE THAT WILL BE CHANGED!
aimAt thread [[level.callbackPlayerDamage]]( self, self, 2000000, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "pelvis", 0, 0 );
}
wait 0.05;
}
}

To this:
    
radiusShot()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_head");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
if(distance( aimAt.origin, ExpLocation ) < 500)
{
weaponclass = getweaponclass(self getCurrentWeapon());
if (isDefined(self.explosiveBulletsWeapon) && self.explosiveBulletsWeapon == self getCurrentWeapon() || weaponclass == "weapon_sniper") //LINE CHANGED!
aimAt thread [[level.callbackPlayerDamage]]( self, self, 2000000, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "pelvis", 0, 0 );
}
wait 0.05;
}
}



Crosshairs Explosive Bullets

Calling:
    
//Put this inside of onPlayerSpawned()
self thread crosshair();


Function:
    
crosshairEB()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_hip_le");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if(isOnCrosshair(player))
{

if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
}
weaponclass = getweaponclass(self getCurrentWeapon());
if (weaponclass == "weapon_sniper")
{
x = randomInt(10);
if(x==1)
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );
}
}
wait 0.05;
}



Additional thread that must be used

    
isOnCrosshair(victim) //Credits to [URL="https://twitter.com/BillinAssDoctor"]@BillinAssDoctor[/URL]
{
currAngles = self getPlayerAngles();
facing = vectorToAngles(victim getTagOrigin("j_spinelower") - self getTagOrigin("j_spinelower"));
aimDist = length(facing - currAngles);
if(aimDist < 25)
return true;
else
return false;
}

If you want to make a Crosshair Hitmarker Explosive Bullets change:
    
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );

to:
    
aimAt thread [[level.callbackPlayerDamage]]( self, self, .01, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, .01, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );



Make bots look at you

Calling:
    
//Call this anywhere
playerLooks(player);
//Obivously you must call a specific player to look at you.

Function:
    
playerLooks(player)
{
player setplayerangles(VectorToAngles((self.origin + (0,0,30)) - (player getTagOrigin("j_head"))));
}



Refill Grenades

Calling:
    
//Put this inside of onPlayerSpawned()
self thread getNades();
self thread refreshNades();


Function:

    
Refresh()
{
self endon("death");
for(;Winky Winky
{
self waittill("changed_class");
self thread getNades();
}
}


    
getNades()
{
self endon("changed_class");
self.gunsList = [];
self.gunsList = self getWeaponsList();
for(i = 0; i < self.gunsList.size; i++)
{
switch(self.gunsList[i])
{
case "concussion_grenade_mp":
case "flash_grenade_mp":
case "willy_pete_mp":
case "emp_grenade_mp":
case "trophy_system_mp":
case "pda_hack_mp":
case "sensor_grenade_mp":
case "tactical_insertion_mp":
case "proximity_grenade_mp":
case "frag_grenade_mp":
case "sticky_grenade_mp":
case "bouncingbetty_mp":
case "claymore_mp":
case "satchel_charge_mp":
case "hatchet_mp":
self.offHand[self.offHand.size] = self.gunsList[i];
self.offHand[self.offHand.size - 1].ammount = self getWeaponAmmoStock( self.gunsList[i] );
break;
}
}
}

Refilling grenades


Calling:
    
//Call this anywhere
refillNades();


Function:

    
refillNades()
{
if(!isDefined(self.offHand.size))
self iPrintln("You don't have any grenades to be refilled!");
else
{
for(i = 0; i < self.offHand.size; i++)
self setweaponammostock( self.offHand[i], self.offHand[i].ammount );
}
}




Random Can Swap

Calling
    
//Call this anywhere:
dropCanSwap();


Function

    
dropCanSwap()
{
weapon = randomGun();
self giveWeapon(weapon, 0, true);
/*You can obviously change the dropped weapon camo:
self giveWeapon(weapon, 0, true( camoNumberHere, 0, 0, 0 ));
Camos list
*/
self dropItem(weapon);
}

Additional threads that must be used
    
randomGun() //Credits to [URL="https://twitter.com/MatrixMods"]@MatrixMods[/URL]
{
self.gun = "";
while(self.gun == "")
{
id = random(level.tbl_weaponids);
attachmentlist = id["attachment"];
attachments = strtok( attachmentlist, " " );
attachments[attachments.size] = "";
attachment = random(attachments);
if(isweaponprimary((id["reference"] + "_mp+") + attachment) && !checkGun(id["reference"] + "_mp+" + attachment))
self.gun = (id["reference"] + "_mp+") + attachment;
wait 0.1;
return self.gun;
}
wait 0.1;
}

    
checkGun(weap) //Credits to [URL="https://twitter.com/MatrixMods"]@MatrixMods[/URL]
{
self.allWeaps = [];
self.allWeaps = self getWeaponsList();
foreach(weapon in self.allWeaps)
{
if(isSubStr(weapon, weap))
return true;
}
return false;
}



SS Billcam

I have tested this for one player, and it works, I can't test it with more players since I don't have any ways to play online, but it should work.
Credits for the concept: You must login or register to view this content.
Calling
    
//Put these inside of init()
level.numberOfSSBillcamsSpawned = 0;
precacheModel("veh_t6_air_v78_vtol_killstreak");
level.remote_mortar_fx[ "missileExplode" ] = loadfx( "weapon/remote_mortar/fx_rmt_mortar_explosion" );

//Put this anywhere
Self thread SSBillcamComesIn();


Functions:

    
SSBillcamComesIn()
{
finalSSDestination = bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) *750, 0, self)["position"] + (0,0,100);
SSBillcamSpawnPoint = finalSSDestination - (1100, 0, -300);
currentSize = level.numberOfSSBillcamsSpawned;
level.SSBillcam[currentSize] = spawn("script_model", SSBillcamSpawnPoint);
level.SSBillcam[currentSize] setmodel("veh_t6_air_v78_vtol_killstreak");
level.SSBillcam[currentSize].driver = undefined;
level.SSBillcam[currentSize] moveTo(finalSSDestination, 11);
level.numberOfSSBillcamsSpawned++;
wait 11;
foreach(player in level.players)
player thread SSBillcamMonitor(currentSize);
}


    
showHopOnText()
{
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
if(!isDefined(self.hopOnInfo))
{
self.hopOnInfo = self createFontString("default", 1.25);
self.hopOnInfo setPoint( "CENTER", "CENTER", 0, 70 );
self.hopOnInfo setText("Press [{+usereload}] to hop on the SS Billcam");
}
}


    
showHopOffText()
{
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(!isDefined(self.hopOffInfo))
{
self.hopOffInfo = self createFontString("default", 1.25);
self.hopOffInfo setPoint( "CENTER", "CENTER", 0, 70 );
self.hopOffInfo setText("Press [{+usereload}] to hop off the SS Billcam");
}
}


    
SSBillcamMonitor(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_exploded");
for(;Winky Winky
{
if(distance(self.origin, level.SSBillcam[whichSSBillcam].origin) < 200)
{
if(checkIfPlayerIsOnSS(whichSSBillcam, self))
showHopOffText();
else
showHopOnText();
if(self useButtonPressed())
{
if(checkIfPlayerIsOnSS(whichSSBillcam, self))
{
if(isDefined(level.SSBillcam[whichSSBillcam].driver) && level.SSBillcam[whichSSBillcam].driver == self)
self thread explodeSSBillcam(whichSSBillcam);
else
{
updateSSCrew(whichSSBillcam, self);
self thread hopOffSS(whichSSBillcam);
}
wait 2;
}
else
{
if(!isDefined(level.SSBillcam[whichSSBillcam].driver))
{
level.SSBillcam[whichSSBillcam].driver = self;
self thread driveTheSS(whichSSBillcam);
}
else
{
self thread hopOnSS(whichSSBillcam);
level.SSBillcam[whichSSBillcam].tripulant[level.SSBillcam[whichSSBillcam].tripulant.size] = self;
}
wait .5;
}
}
}
else
{
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
}
wait 0.01;
}
}

    
checkIfPlayerIsOnSS(whichSSBillcam, player)
{
foreach(tripulant in level.SSBillcam[whichSSBillcam].tripulant)
{
if(tripulant == player)
return true;
}
if(isDefined(level.SSBillcam[whichSSBillcam].driver) && level.SSBillcam[whichSSBillcam].driver == player)
return true;
return false;
}

    
updateSSCrew(whichSSBillcam, player)
{
level.SSBillcam[whichSSBillcam] = eraseTripulantMembers(whichSSBillcam, player);
}

    
eraseTripulantMembers(whichSSBillcam, player)
{
billcamAray = level.SSBillcam[whichSSBillcam];
billcamAray.driver = level.SSBillcam[whichSSBillcam].driver;
billcamAray.angles = level.SSBillcam[whichSSBillcam].angles;
billcamAray.origin = level.SSBillcam[whichSSBillcam].origin;
billcamAray.model = level.SSBillcam[whichSSBillcam].model;
billcamAray.crewSize = 0;
for(i = 0; i < level.SSBillcam[whichSSBillcam].tripulant.size; i++)
{
if(level.SSBillcam[whichSSBillcam].tripulant[i] != player)
{
billcamAray.tripulant[billcamAray.crewSize] = level.SSBillcam[whichSSBillcam].tripulant[i];
billcamAray.crewSize++;
}
}
return billcamAray;
}

    
driveTheSS(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_exploded");
self thread hopOnSS(whichSSBillcam);
wait 2;
for(;Winky Winky
{
if(self fragButtonPressed())
level.SSBillcam[whichSSBillcam] rotateYaw(-4, 0.000000001);
if(self SecondaryOffhandButtonPressed())
level.SSBillcam[whichSSBillcam] rotateYaw(4, 0.000000001);
if(self AttackButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin + (0,0,15), 0.0000000001);
if(self adsButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin - (0,0,15), 0.0000000001);
if(self jumpButtonPressed() && self adsButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50) + level.SSBillcam[whichSSBillcam].origin - (0,0,15), 0.01);
else if(self jumpButtonPressed() && self attackButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50) + level.SSBillcam[whichSSBillcam].origin + (0,0,15), 0.01);
else if(self jumpButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin + vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50), 0.01);
else if(self useButtonPressed())
{
self thread explodeSSBillcam(whichSSBillcam);
break;
}
wait 0.01;
}
}

    
explodeSSBillcam(whichSSBillcam)
{
playfx(level.remote_mortar_fx["missileExplode"], level.SSBillcam[whichSSBillcam].origin);
foreach(player in level.players)
{
if(checkIfPlayerIsOnSS(whichSSBillcam, player))
player thread hopOffSS(whichSSBillcam, "final");
}
level.SSBillcam[whichSSBillcam] delete();
}

    
hopOffSS(whichSSBillcam, final)
{
self unlink();
self show();
self freezeControls(false);
self setClientThirdPerson(0);
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
if(isDefined(final))
self notify("SSBillcam" + whichSSBillcam + "_exploded");
else
self notify("SSBillcam" + whichSSBillcam + "_left");
}

    
hopOnSS(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_left");
self endon("SSBillcam" + whichSSBillcam + "_exploded");
self hide();
self freezeControls(true);
self linkTo(level.SSBillcam[whichSSBillcam]);
setDvar("cg_thirdPersonRange", "150");
self setClientThirdPerson(1);
for(;Winky Winky
{
self setplayerangles(level.SSBillcam[whichSSBillcam].angles);
wait 0.01;
}
}

Additional thread that must be used
    
vector_scal(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}



After that you can create your platform and mess arround with it.

Care Package Stall

Calling:
    
//Put these insde of init()
level.carePackageStallsSpawned = 0;
precacheModel("t6_wpn_supply_drop_ally");
//Put this anywhere
self thread carePackageStall();


Function:

    
carePackageStall()
{
destination = bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) 750, 0, self)["position"] + (0,0,20); //You can change destination to whatever other value you want!
currentSize = level.carePackageStallsSpawned;
level.carePackageStall[currentSize] = spawn("script_model", destination);
level.carePackageStall[currentSize] setmodel("t6_wpn_supply_drop_trap");
level.carePackageStallsSpawned++;
foreach (player in level.players)
player thread carePackageStallThink(destination);
}


    
showCarePackageInfo()
{
self.infoStall = self createFontString("default", 1.25);
self.infoStall setPoint( "CENTER", "CENTER", 0, 70 );
self.infoStall setText("Press [{+usereload}] for Care Package");
}


    
carePackageStallThink(Stall) //My concept but credits to [URL="https://www.nextgenupdate.com/forums/members/1397839-blaznmods.html"]BlaznMods[/URL]
{
self endon("disconnect");
self.onlyLinkOnce = true;
for(;Winky Winky
{
self.infoStall destroy();
if(!(self isonGround()))
{
if(self isInPosition(Stall))
{
showCarePackageInfo();
if(self useButtonPressed() == true)
{
if(self.onlyLinkOnce == true)
{
self.stall = spawn("script_model", self.origin);
self playerLinkTo(self.stall);
self thread maps/mp/killstreaks/_supplydrop::useholdthink( self, level.cratenonownerusetime );
self freeze_player_controls( 0 );
self.onlyLinkOnce = false;
}
}
else if(!self useButtonPressed())
{
self.onlyLinkOnce = true;
self.stall delete();
}
}
else
self.InfoStall destroy();
}
wait 0.05;
}
}

Additional threads that must be used
    
vector_scale(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}


    
isInPosition( sP ) //Again if you are using the Slide or the Bounce you need to change the thread's name!
{
if(distance( self.origin, sP ) < 250)
return true;
return false;
}



Auto Class-Changing

Calling:
    
//Put this inside of onPlayerSpawned()
self thread monitorClass();


Function:

    
MonitorClass()
{
self endon("disconnect");
for(;Winky Winky
{
self waittill("changed_class");
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait .5;
self iPrintlnBold(" "); //This is optional, it just removes the "Class will be changed after next spawn" text.
wait 0.01;
}
}




Change Score per Kill

Calling:
    
//Call this anywhere
setPlayerScore(SET THE AMMOUNT OF SCORE PERK KILL YOU WANT TO HAVE HERE);

//You must put the score under quotes, for instance:
setPlayerScore("1337");


Function:
    
setPlayerScore(scoreAmmount)
{
setDvar( "scr_" + getDvar("g_gametype") + "_score_kill", scoreAmmount );
}




Make Game Unlimited

Calling:
    
//Put this anywhere
makeUnlimitedGame();


Function:
    
makeUnlimitedGame()
{
setDvar("scr_" + getDvar("g_gametype") + "_timelimit",0);
maps\mp\gametypes\_globallogic_utils::pausetimer();
}




Random body parts for Trickshotting-hitting

Calling:
    
//You should calland use this inside your explosive Bullets function like this:
randomTag = getTagOrigin(getRandomTag());

//When you normaly would have:
aimAt thread [[level.callbackPlayerDamage]]( self, self, 21952324, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );

//switch it to
aimAt thread [[level.callbackPlayerDamage]]( self, self, 21952324, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), randomTag, 0, 0 );


Function:
    
getRandomTag()
{
bone = randomInt(76);
switch(bone)
{
case 1: return "j_mouth_ri"; break;
case 2: return "j_mouth_le"; break;
case 3: return "j_lip_top_ri"; break;
case 4: return "j_lip_top_le"; break;
case 5: return "j_levator_ri"; break;
case 6: return "j_levator_le"; break;
case 7: return "j_jaw"; break;
case 8: return "j_head_end"; break;
case 9: return "j_cheek_le"; break;
case 10: return "j_cheek_ri"; break;
case 11: return "j_head"; break;
case 12: return "j_neck"; break;
case 12: return "j_spine4"; break;
case 13: return "j_thumb_ri_3"; break;
case 14: return "j_thumb_le_3"; break;
case 15: return "j_ring_ri_3"; break;
case 16: return "j_ring_le_3"; break;
case 17: return "j_pinky_ri_3"; break;
case 18: return "j_pinky_le_3"; break;
case 19: return "j_mid_ri_3"; break;
case 20: return "j_mid_le_3"; break;
case 21: return "j_index_ri_3"; break;
case 22: return "j_index_le_3"; break;
case 23: return "j_thumb_ri_2"; break;
case 24: return "j_thumb_le_2"; break;
case 25: return "j_ring_ri_2"; break;
case 26: return "j_ring_le_2"; break;
case 27: return "j_pinky_ri_2"; break;
case 28: return "j_pinky_le_2"; break;
case 29: return "j_mid_ri_2"; break;
case 30: return "j_mid_le_2"; break;
case 31: return "j_index_ri_2"; break;
case 32: return "j_index_le_2"; break;
case 33: return "tag_weapon_right"; break;
case 34: return "tag_weapon_left"; break;
case 35: return "j_thumb_ri_1"; break;
case 36: return "j_thumb_le_1"; break;
case 37: return "j_ring_ri_1"; break;
case 38: return "j_ring_le_1"; break;
case 39: return "j_pinky_ri_1"; break;
case 40: return "j_pinky_le_1"; break;
case 41: return "j_mid_ri_1"; break;
case 42: return "j_mid_le_1"; break;
case 43: return "j_index_ri_1"; break;
case 44: return "j_index_le_1"; break;
case 45: return "j_wristtwist_ri"; break;
case 46: return "j_wristtwist_le"; break;
case 47: return "j_wrist_ri"; break;
case 48: return "j_wrist_le"; break;
case 49: return "j_shouldertwist_ri"; break;
case 50: return "j_shouldertwist_le"; break;
case 51: return "j_elbow_ri"; break;
case 52: return "j_elbow_le"; break;
case 53: return "j_elbow_bulge_ri"; break;
case 54: return "j_elbow_bulge_le"; break;
case 55: return "j_shoulder_ri"; break;
case 56: return "j_shoulder_le"; break;
case 57: return "j_head"; break;
case 58: return "j_neck"; break;
case 59: return "j_clavicle_ri"; break;
case 60: return "j_clavicle_le"; break;
case 61: return "j_spine4"; break;
case 62: return "j_ball_ri"; break;
case 63: return "j_ball_le"; break;
case 64: return "j_ankle_ri"; break;
case 65: return "j_ankle_le"; break;
case 66: return "back_mid"; break;
case 67: return "j_knee_ri"; break;
case 68: return "j_knee_le"; break;
case 69: return "back_low"; break;
case 70: return "j_chin_skinroll"; break;
case 71: return "torso_stabilizer"; break;
case 72: return "j_hip_ri"; break;
case 73: return "j_hip_le"; break;
case 74: return "pelvis"; break;
case 75: return "j_mainroot"; break;
}
}



Blood Spatter


Calling:
    
//Put this inside of init()
level._effect["blood"] = loadfx("impacts/fx_flesh_hit_body_fatal_exit");

//You should call this inside an Explosive Bullets Thread like so
playFx(level._effect["blood"], player getTagOrigin(body part here));




Changing Player Model


Calling:
    
//Put this inside of onPlayerSpawned()
determineTeam();

//Put this anywhere
changeModel("sniper");
/*As argument you can give:
"assault"
"lmg"
"shotgun"
"smg"
"sniper"
*/

//Must be in lowercase and must be under quotes

Function
    
changeModel(whatModelType)
{
self setModel(self.pers["teamRealName"] + "_" + whatModelName + "_fb");
}


Additional thread that must be used
    
determineTeam()
{
if(isSubStr(self.model, "seal6"))
self.pers["teamRealName"] = "c_usa_mp_seal6";
else if(isSubStr(self.model, "cordis"))
self.pers["teamRealName"] = "c_mul_mp_cordis";
else if(isSubStr(self.model, "fbi"))
self.pers["teamRealName"] = "c_usa_mp_fbi";
else if(isSubStr(self.model, "pmc"))
self.pers["teamRealName"] = "c_mul_mp_pmc";
else if(isSubStr(self.model, "isa"))
self.pers["teamRealName"] = "c_usa_mp_isa";
else
self.pers["teamRealName"] = "c_usa_pla_isa";
}




Fake Bullet Trail

Calling:
    
//You should put this inside of your Explosive Bullets Code
MagicBullet(self GetCurrentWeapon(), self getTagOrigin("j_shoulder_ri") , player getTagOrigin("j_head"), self);




Instant Last

Calling:
    
//Put this anywhere
lastKill();


Function:
    
lastKill()
{
if(getDvar("g_gametype") == "tdm")
{
[[level._setteamscore]]( self.pers["team"], level.scorelimit - 1 );
foreach(player in level.players)
{
if(player.pers["team"] == self.pers["team"])
{
player.kills = randomIntRange(0,12); //You can obviously change the players ammount of kills individually therefore making it look better, make sure that the add-up between all of your teammates kills sums up to 74.
player.assists = randomIntRange(0, player.kills);
player.score = (player.kills * 100) + (player.assists * 15);
player.headshots = (randomIntRange(0, player.kills / 6));
player.deaths = player.kills / 2;
}
}
}
else if(getDvar("g_gametype") == "dm")
{
self.pointstowin = level.scorelimit - 1;
self.pers["pointstowin"] = level.scorelimit - 1;
variantScore = randomInt(130);
self.score = ((level.scorelimit - 1) * 100) + variantScore * 10;
self.pers["score"] = self.score;
self.kills = level.scorelimit - 1;
self.deaths = randomIntRange(12,20);
self.headshots = randomInt(Cool Man (aka Tustin);
self.pers["kills"] = level.scorelimit - 1;
self.pers["deaths"] = self.deaths;
self.pers["headshots"] = self.headshots;
}
}



I created this so there woudln't be a rediculous ammount of threads requesting specific stuff that are in this topic.
If you want anything added here or just want to talk to me about something posted here You must login or register to view this content.
Last edited by warcos ; 01-19-2017 at 08:05 PM.

The following 4 users say thank you to warcos for this useful post:

DoraTheKiller97, itsNebulah, itsSorrow, Tristen

The following 3 users groaned at warcos for this awful post:

anthonything, MrMoan, Patrick
08-11-2016, 07:13 AM #2
anthonything
Space Ninja
Originally posted by warcos View Post
Black Ops II Trickshotting Managed Code List



Hello, this is a trickshotting-related GSC Managed Code List
If you wish to add more functions to this, quote me and I'll be adding it as soon as possible.

Pastebins

Weapons
You must login or register to view this content.
You must login or register to view this content.
Models
You must login or register to view this content.

Authentication

Function:
    
//Put this inside of onPlayerConnected()
if (player ishost())
{
nameToAuth = toLower(player getName());
if (!isSubstr( nameToAuth, "NAME OR PART OF THE NAME THAT THE PERSON MUST HAVE IN ORDER TO PLAY THE MENU") || getDvar("g_speed") != "190")
{
player waittill("spawned_player");
wait 5;
thread maps/mp/gametypes/_globallogic::endgame("loss", "ENTER WHATEVER MESSAGE YOU WANT TO SHOW AT THE TOP OF THE SCREEN AS THE GAME ENDS HERE");
}
else
{
setDvar("g_speed", "191"); // You can use whatever dvar you want here
//Here you should put the threads that will work only for the players that is authed

}
}

Additional thread that must be used
    
getName()
{
name = getSubStr(self.name, 0, self.name.size);
for(i = 0; i < name.size; i++)
{
if(name[i]=="]")
break;
}
if(name.size != i)
name = getSubStr(name, i + 1, name.size);
return name;
}

You can also use clan tag auth, which is basically the same process.

Platforms

If you want to be able to create only one platform at the time:

Calling:
    
//Call like:
spawnPlat(self.origin);
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
spawnPlat(location)
{
while (isDefined(self.spawnedcrate[0][0]))
{
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
{
self.spawnedcrate[i][d] delete();
d++;
}
i++;
}
}
startpos = location + (0, 0, -15);
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
self.spawnedcrate[i][d] = spawn("script_model", startpos + (d 40, i 70, 0));
{
self.spawnedcrate[i][d] setmodel("t6_wpn_supply_drop_ally");
d++;
}
i++;
}
}

If you don't want your previous platform to be deleted use:
    
spawnPlat(location)
{
startpos = location + (0, 0, -15);
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
{
self.spawnedcrate[i][d] = spawn("script_model", startpos + (d 40, i 70, 0));
self.spawnedcrate[i][d] setmodel("t6_wpn_supply_drop_ally");
d++;
}
i++;
}
}


Bounces

Calling:
    
self thread bounce(self.origin, self.angles);
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
bounce( bounceOrigin, bounceAngles )
{
level.Bounce[level.Bounce.size] = spawn("script_model", bounceOrigin);
level.Bounce[level.Bounce.size - 1] setmodel("t6_wpn_supply_drop_hq");
level.Bounce[level.Bounce.size - 1].angles=(0,bounceAngles-90,60);
for(;Winky Winky
{
foreach(player in level.players)
{
if (!player isOnGround())
{
self.vel = player GetVelocity();
self.newVel = (self.vel[0], self.vel[1], self Negate(self.vel[2]));
}
self.canBounce = true;
if( player isInPosition(bounceOrigin) && self.vel[2] < 0 && self.canBounce == true)
{
player SetVelocity( self.newVel 2 );
self.canBounce = false;
wait 7.5;
self.canBounce = true;
}
}
wait .01;
}
}

You need to use both of these threads aswell:
    
Negate( vector ) // Credits go to CodJumper.
{
negative = vector - (vector 100.125);
return( negative );
}

    
isInPosition( sP )
{
if(distance( self.origin, sP ) < 150)
return true;
return false;
}



Slides

Calling:
    
self thread slide(self.origin, self.angles);
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
slide( slideOrigin, slideAngles )
{
playngles = self getPlayerAngles();
playnglesV = anglesToForward(playngles);
for(;Winky Winky
{
if( self isInPos(slideOrigin) && self meleebuttonpressed() && self ismeleeing() && length( vecXY(self getPlayerAngles() - slideAngles) ) < 15 )
{
self setOrigin( self getOrigin() + (0, 0, 10) );
playerAngles2 = anglesToForward(self getPlayerAngles());
self setVelocity( self getVelocity() + (playerAngles2[0]*1000, playerAngles2[1]*1000, 0) );
for(i = 0; i < 15; i++)
self setVelocity( self getVelocity() + (0, 0, 999) );
}
wait .01;
}
}

Additional threads that must be used
    
vecXY( vec )
{
return (vec[0], vec[1], 0);
}
isInPosition( sP ) //If you are going to use both the slide and the bounce make sure to change one of the thread's name because the distances compared are different in the two cases.
{
if(distance( self.origin, sP ) < 100)
return true;
return false;
}



NAC Mod

Calling:
    
self thread NAC();
self.firstWeaponCamo = randomint(46); //you can change this to whatever camo # you want for weapon 1
self.secondWeaponCamo = randomint(46); //you can change this to whatever camo # you want for weapon 2
self.NACWeaponsCount = 1;
Camos list

Function:
    
NAC()
{
self.NACWeaponsCount = 1;
self.cam
self endon("disconnect");
for(;Winky Winky
{
if(self actionSlotThreeButtonPressed())
{
if(self.NACWeaponsCount < 3)
saveWeapons();
else
executeNAC();
}
wait 0.01;
}
}


    
saveWeapons()
{
if(self.NACWeaponsCount == 1)
{
self.firstWeapon = self getCurrentWeapon();
self.NACWeaponsCount++;
self iprintln("First weapon: " + self.firstWeapon);
}
else if(self.NACWeaponsCount == 2)
{
if(self.firstWeapon!=self getCurrentWeapon())
{
self.secondWeapon = self getCurrentWeapon();
self.NACWeaponsCount++;
self iprintln("Second Weapon: " + self.secondWeapon);
}
}
}


    
executeNAC()
{
if(self.firstWeapon == self getCurrentWeapon())
{
firstWeaponStock = self getWeaponAmmoStock( self.firstWeapon );
firstWeaponClip = self getWeaponAmmoClip( self.firstWeapon );
self takeWeapon(self.firstWeapon);
self switchToWeapon(self.secondWeapon);
self giveWeapon(self.firstWeapon, 0, true(self.firstWeaponCamo, 0, 0, 0, 0));
self setweaponammostock( self.firstWeapon, firstWeaponStock );
self setweaponammoclip( self.firstWeapon, firstWeaponClip );
}
else if(self.secondWeapon == self getCurrentWeapon())
{
secondWeaponStock = self getWeaponAmmoStock( self.secondWeapon );
secondWeaponClip = self getWeaponAmmoClip( self.secondWeapon );
self takeWeapon(self.secondWeapon);
self switchToWeapon(self.firstWeapon);
self giveWeapon(self.secondWeapon,0,true(self.secondWeaponCamo,0,0,0,0));
self setweaponammostock( self.secondWeapon, secondWeaponStock );
self setweaponammoclip( self.secondWeapon, secondWeaponClip );
}
else
{
self.NACWeaponsCount = 1;
self iprintln("This weapon wasn't previously saved!\nSave weapons again!");
}
}



Match Bonus
Calling:
    
//Put this inside of onPlayerSpawned()
if(self isHost())
self thread getTimePassed();
//Preferably should be called only to the host, so there won't be more than one time watchers.


Function:
    
getTimePassed()
{
self.timePassed = 0;
self endon("disconnect");
level endon( "game_ended" );
for(;Winky Winky
{
self.timePassed++;
updateMatchBonus();
wait 1;
}
}


    
updateMatchBonus()
{
timeLimit = getDvar("scr_" + getDvar("g_gametype") + "_timelimit");
maxMatchBonus = timeLimit * (61 / 12);
if (getDvar("g_gametype") == "sd")
{
level.timeLeft = timeLimit - timePassed;
self.MBAmmount = floor((self.timePassed)*(((self.pers["rank"] + 1)+6)/12));
if(self.MBAmmount > maxMatchBonus)
self.MBAmmount = maxMatchBonus;
}
foreach(player in level.players)
player.matchbonus = level.MBAmmount;
}


If you want to use the match bonus without having to remove pre-round timer:
(This method will only work if you DO NOT use "freezeControls(false);" at the beggining of the game!)

    
onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");
for(;Winky Winky
{
self waittill("spawned_player");
if(self isHost())
self thread monitorStartingFreeze();
}
}


    
monitorStartingFreeze()
{
while(self arecontrolsfrozen())
wait .01;
self thread getTimePassed();
}



Floater

Calling:
    
//Put these inside of init()
level thread floaters();
precacheModel("collision_clip_32x32x10");


Function:

    
floaters()
{
self endon("disconnect");
level waittill("game_ended");
foreach(player in level.players)
{
if(isAlive(player) && !player isOnGround())
player thread executeFloater();
}
}



    
executeFloater()
{
z = 0;
startingOrigin = self getOrigin();
floaterPlatform = spawn("script_model", startingOrigin - (0, 0, 20));
playerAngles = self getPlayerAngles();
floaterPlatform.angles=(0, playerAngles[1] , 0);
floaterPlatform setModel("collision_clip_32x32x10");
for(;Winky Winky
{
z++;
floaterPlatform.origin=(startingOrigin - (0, 0, z*1 ));
wait .01;
}
}



Explosive Bullets weapon selector

Calling:
    
//Put this at onPlayerSpawned()
self.explosiveBulletsWeapon = undefined;
//Put this anywhere
self thread weaponSelector();

Function:

    
weaponSelector()
{
if (!isDefined(self.explosiveBulletsWeapon))
{
self.explosiveBulletsWeapon = self getCurrentWeapon();
self iprintln("Explosive Bullets Weapon: " + self.explosiveBulletsWeapon);
}
else
{
if(self getcurrentweapon() != self.explosiveBulletsWeapon)
{
self.explosiveBulletsWeapon = self getCurrentWeapon();
self iprintlnBold("Explosive Bullets Weapon: " + self.explosiveBulletsWeapon);
}
else
{
self.explosiveBulletsWeapon = undefined;
self iPrintlnBold("Your EB will now work with every sniper!");
}
}
}

You have to change your explosive bullets thread aswell from this:
    
radiusShot()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_head");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
if(distance( aimAt.origin, ExpLocation ) < 500)
{
weaponclass = getweaponclass(self getCurrentWeapon());
if (weaponclass == "weapon_sniper") //LINE THAT WILL BE CHANGED!
aimAt thread [[level.callbackPlayerDamage]]( self, self, 2000000, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "pelvis", 0, 0 );
}
wait 0.05;
}
}

To this:
    
radiusShot()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_head");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
if(distance( aimAt.origin, ExpLocation ) < 500)
{
weaponclass = getweaponclass(self getCurrentWeapon());
if (isDefined(self.explosiveBulletsWeapon) && self.explosiveBulletsWeapon == self getCurrentWeapon() || weaponclass == "weapon_sniper") //LINE CHANGED!
aimAt thread [[level.callbackPlayerDamage]]( self, self, 2000000, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "pelvis", 0, 0 );
}
wait 0.05;
}
}



Crosshairs Explosive Bullets

Calling:
    
//Put this inside of onPlayerSpawned()
self thread crosshair();


Function:
    
crosshairEB()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_hip_le");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if(isOnCrosshair(player))
{

if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
}
weaponclass = getweaponclass(self getCurrentWeapon());
if (weaponclass == "weapon_sniper")
{
x = randomInt(10);
if(x==1)
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );
}
}
wait 0.05;
}



Additional thread that must be used

    
isOnCrosshair(victim) //Credits to [URL="https://twitter.com/BillinAssDoctor"]@BillinAssDoctor[/URL]
{
currAngles = self getPlayerAngles();
facing = vectorToAngles(victim getTagOrigin("j_spinelower") - self getTagOrigin("j_spinelower"));
aimDist = length(facing - currAngles);
if(aimDist < 25)
return true;
else
return false;
}

If you want to make a Crosshair Hitmarker Explosive Bullets change:
    
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );

to:
    
aimAt thread [[level.callbackPlayerDamage]]( self, self, .01, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, .01, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );



Make bots look at you

Calling:
    
//Call this anywhere
playerLooks(player);
//Obivously you must call a specific player to look at you.

Function:
    
playerLooks(player)
{
player setplayerangles(VectorToAngles((self.origin + (0,0,30)) - (player getTagOrigin("j_head"))));
}



Refill Grenades

Calling:
    
//Put this inside of onPlayerSpawned()
self thread getNades();
self thread refreshNades();


Function:

    
Refresh()
{
self endon("death");
for(;Winky Winky
{
self waittill("changed_class");
self thread getNades();
}
}


    
getNades()
{
self endon("changed_class");
self.gunsList = [];
self.gunsList = self getWeaponsList();
for(i = 0; i < self.gunsList.size; i++)
{
switch(self.gunsList[i])
{
case "concussion_grenade_mp":
case "flash_grenade_mp":
case "willy_pete_mp":
case "emp_grenade_mp":
case "trophy_system_mp":
case "pda_hack_mp":
case "sensor_grenade_mp":
case "tactical_insertion_mp":
case "proximity_grenade_mp":
case "frag_grenade_mp":
case "sticky_grenade_mp":
case "bouncingbetty_mp":
case "claymore_mp":
case "satchel_charge_mp":
case "hatchet_mp":
self.offHand[self.offHand.size] = self.gunsList[i];
self.offHand[self.offHand.size - 1].ammount = self getWeaponAmmoStock( self.gunsList[i] );
break;
}
}
}

Refilling grenades


Calling:
    
//Call this anywhere
refillNades();


Function:

    
refillNades()
{
if(!isDefined(self.offHand.size))
self iPrintln("You don't have any grenades to be refilled!");
else
{
for(i = 0; i < self.offHand.size; i++)
self setweaponammostock( self.offHand[i], self.offHand[i].ammount );
}
}




Random Can Swap

Calling
    
//Call this anywhere:
dropCanSwap();


Function

    
dropCanSwap()
{
weapon = randomGun();
self giveWeapon(weapon, 0, true);
/*You can obviously change the dropped weapon camo:
self giveWeapon(weapon, 0, true( camoNumberHere, 0, 0, 0 ));
Camos list
*/
self dropItem(weapon);
}

Additional threads that must be used
    
randomGun() //Credits to [URL="https://twitter.com/MatrixMods"]@MatrixMods[/URL]
{
self.gun = "";
while(self.gun == "")
{
id = random(level.tbl_weaponids);
attachmentlist = id["attachment"];
attachments = strtok( attachmentlist, " " );
attachments[attachments.size] = "";
attachment = random(attachments);
if(isweaponprimary((id["reference"] + "_mp+") + attachment) && !checkGun(id["reference"] + "_mp+" + attachment))
self.gun = (id["reference"] + "_mp+") + attachment;
wait 0.1;
return self.gun;
}
wait 0.1;
}

    
checkGun(weap) //Credits to [URL="https://twitter.com/MatrixMods"]@MatrixMods[/URL]
{
self.allWeaps = [];
self.allWeaps = self getWeaponsList();
foreach(weapon in self.allWeaps)
{
if(isSubStr(weapon, weap))
return true;
}
return false;
}



SS Billcam

I have tested this for one player, and it works, I can't test it with more players since I don't have any ways to play online, but it should work.
Credits for the concept: You must login or register to view this content.
Calling
    
//Put these inside of init()
level.numberOfSSBillcamsSpawned = 0;
precacheModel("veh_t6_air_v78_vtol_killstreak");
level.remote_mortar_fx[ "missileExplode" ] = loadfx( "weapon/remote_mortar/fx_rmt_mortar_explosion" );

//Put this anywhere
Self thread SSBillcamComesIn();


Functions:

    
SSBillcamComesIn()
{
finalSSDestination = bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) *750, 0, self)["position"] + (0,0,100);
SSBillcamSpawnPoint = finalSSDestination - (1100, 0, -300);
currentSize = level.numberOfSSBillcamsSpawned;
level.SSBillcam[currentSize] = spawn("script_model", SSBillcamSpawnPoint);
level.SSBillcam[currentSize] setmodel("veh_t6_air_v78_vtol_killstreak");
level.SSBillcam[currentSize].driver = undefined;
level.SSBillcam[currentSize] moveTo(finalSSDestination, 11);
level.numberOfSSBillcamsSpawned++;
wait 11;
foreach(player in level.players)
player thread SSBillcamMonitor(currentSize);
}


    
showHopOnText()
{
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
if(!isDefined(self.hopOnInfo))
{
self.hopOnInfo = self createFontString("default", 1.25);
self.hopOnInfo setPoint( "CENTER", "CENTER", 0, 70 );
self.hopOnInfo setText("Press [{+usereload}] to hop on the SS Billcam");
}
}


    
showHopOffText()
{
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(!isDefined(self.hopOffInfo))
{
self.hopOffInfo = self createFontString("default", 1.25);
self.hopOffInfo setPoint( "CENTER", "CENTER", 0, 70 );
self.hopOffInfo setText("Press [{+usereload}] to hop off the SS Billcam");
}
}


    
SSBillcamMonitor(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_exploded");
for(;Winky Winky
{
if(distance(self.origin, level.SSBillcam[whichSSBillcam].origin) < 200)
{
if(checkIfPlayerIsOnSS(whichSSBillcam, self))
showHopOffText();
else
showHopOnText();
if(self useButtonPressed())
{
if(checkIfPlayerIsOnSS(whichSSBillcam, self))
{
if(isDefined(level.SSBillcam[whichSSBillcam].driver) && level.SSBillcam[whichSSBillcam].driver == self)
self thread explodeSSBillcam(whichSSBillcam);
else
{
updateSSCrew(whichSSBillcam, self);
self thread hopOffSS(whichSSBillcam);
}
wait 2;
}
else
{
if(!isDefined(level.SSBillcam[whichSSBillcam].driver))
{
level.SSBillcam[whichSSBillcam].driver = self;
self thread driveTheSS(whichSSBillcam);
}
else
{
self thread hopOnSS(whichSSBillcam);
level.SSBillcam[whichSSBillcam].tripulant[level.SSBillcam[whichSSBillcam].tripulant.size] = self;
}
wait .5;
}
}
}
else
{
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
}
wait 0.01;
}
}

    
checkIfPlayerIsOnSS(whichSSBillcam, player)
{
foreach(tripulant in level.SSBillcam[whichSSBillcam].tripulant)
{
if(tripulant == player)
return true;
}
if(isDefined(level.SSBillcam[whichSSBillcam].driver) && level.SSBillcam[whichSSBillcam].driver == player)
return true;
return false;
}

    
updateSSCrew(whichSSBillcam, player)
{
level.SSBillcam[whichSSBillcam] = eraseTripulantMembers(whichSSBillcam, player);
}

    
eraseTripulantMembers(whichSSBillcam, player)
{
billcamAray = level.SSBillcam[whichSSBillcam];
billcamAray.driver = level.SSBillcam[whichSSBillcam].driver;
billcamAray.angles = level.SSBillcam[whichSSBillcam].angles;
billcamAray.origin = level.SSBillcam[whichSSBillcam].origin;
billcamAray.model = level.SSBillcam[whichSSBillcam].model;
billcamAray.crewSize = 0;
for(i = 0; i < level.SSBillcam[whichSSBillcam].tripulant.size; i++)
{
if(level.SSBillcam[whichSSBillcam].tripulant[i] != player)
{
billcamAray.tripulant[billcamAray.crewSize] = level.SSBillcam[whichSSBillcam].tripulant[i];
billcamAray.crewSize++;
}
}
return billcamAray;
}

    
driveTheSS(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_exploded");
self thread hopOnSS(whichSSBillcam);
wait 2;
for(;Winky Winky
{
if(self fragButtonPressed())
level.SSBillcam[whichSSBillcam] rotateYaw(-4, 0.000000001);
if(self SecondaryOffhandButtonPressed())
level.SSBillcam[whichSSBillcam] rotateYaw(4, 0.000000001);
if(self AttackButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin + (0,0,15), 0.0000000001);
if(self adsButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin - (0,0,15), 0.0000000001);
if(self jumpButtonPressed() && self adsButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50) + level.SSBillcam[whichSSBillcam].origin - (0,0,15), 0.01);
else if(self jumpButtonPressed() && self attackButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50) + level.SSBillcam[whichSSBillcam].origin + (0,0,15), 0.01);
else if(self jumpButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin + vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50), 0.01);
else if(self useButtonPressed())
{
self thread explodeSSBillcam(whichSSBillcam);
break;
}
wait 0.01;
}
}

    
explodeSSBillcam(whichSSBillcam)
{
playfx(level.remote_mortar_fx["missileExplode"], level.SSBillcam[whichSSBillcam].origin);
foreach(player in level.players)
{
if(checkIfPlayerIsOnSS(whichSSBillcam, player))
player thread hopOffSS(whichSSBillcam, "final");
}
level.SSBillcam[whichSSBillcam] delete();
}

    
hopOffSS(whichSSBillcam, final)
{
self unlink();
self show();
self freezeControls(false);
self setClientThirdPerson(0);
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
if(isDefined(final))
self notify("SSBillcam" + whichSSBillcam + "_exploded");
else
self notify("SSBillcam" + whichSSBillcam + "_left");
}

    
hopOnSS(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_left");
self endon("SSBillcam" + whichSSBillcam + "_exploded");
self hide();
self freezeControls(true);
self linkTo(level.SSBillcam[whichSSBillcam]);
setDvar("cg_thirdPersonRange", "150");
self setClientThirdPerson(1);
for(;Winky Winky
{
self setplayerangles(level.SSBillcam[whichSSBillcam].angles);
wait 0.01;
}
}

Additional thread that must be used
    
vector_scal(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}



After that you can create your platform and mess arround with it.

Care Package Stall

Calling:
    
//Put these insde of init()
level.carePackageStallsSpawned = 0;
precacheModel("t6_wpn_supply_drop_ally");
//Put this anywhere
self thread carePackageStall();


Function:

    
carePackageStall()
{
destination = bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) 750, 0, self)["position"] + (0,0,20); //You can change destination to whatever other value you want!
currentSize = level.carePackageStallsSpawned;
level.carePackageStall[currentSize] = spawn("script_model", destination);
level.carePackageStall[currentSize] setmodel("t6_wpn_supply_drop_trap");
level.carePackageStallsSpawned++;
foreach (player in level.players)
player thread carePackageStallThink(destination);
}


    
showCarePackageInfo()
{
self.infoStall = self createFontString("default", 1.25);
self.infoStall setPoint( "CENTER", "CENTER", 0, 70 );
self.infoStall setText("Press [{+usereload}] for Care Package");
}


    
carePackageStallThink(Stall) //My concept but credits to [URL="https://www.nextgenupdate.com/forums/members/1397839-blaznmods.html"]BlaznMods[/URL]
{
self endon("disconnect");
self.onlyLinkOnce = true;
for(;Winky Winky
{
self.infoStall destroy();
if(!(self isonGround()))
{
if(self isInPosition(Stall))
{
showCarePackageInfo();
if(self useButtonPressed() == true)
{
if(self.onlyLinkOnce == true)
{
self.stall = spawn("script_model", self.origin);
self playerLinkTo(self.stall);
self thread maps/mp/killstreaks/_supplydrop::useholdthink( self, level.cratenonownerusetime );
self freeze_player_controls( 0 );
self.onlyLinkOnce = false;
}
}
else if(!self useButtonPressed())
{
self.onlyLinkOnce = true;
self.stall delete();
}
}
else
self.InfoStall destroy();
}
wait 0.05;
}
}

Additional threads that must be used
    
vector_scale(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}


    
isInPosition( sP ) //Again if you are using the Slide or the Bounce you need to change the thread's name!
{
if(distance( self.origin, sP ) < 250)
return true;
return false;
}



Auto Class-Changing

Calling:
    
//Put this inside of onPlayerSpawned()
self thread monitorClass();


Function:

    
MonitorClass()
{
self endon("disconnect");
for(;Winky Winky
{
self waittill("changed_class");
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait .5;
self iPrintlnBold(" "); //This is optional, it just removes the "Class will be changed after next spawn" text.
wait 0.01;
}
}




Change Score per Kill

Calling:
    
//Call this anywhere
setPlayerScore(SET THE AMMOUNT OF SCORE PERK KILL YOU WANT TO HAVE HERE);

//You must put the score under quotes, for instance:
setPlayerScore("1337");


Function:
    
setPlayerScore(scoreAmmount)
{
setDvar( "scr_" + getDvar("g_gametype") + "_score_kill", scoreAmmount );
}




Make Game Unlimited

Calling:
    
//Put this anywhere
makeUnlimitedGame();


Function:
    
makeUnlimitedGame()
{
setDvar("scr_" + getDvar("g_gametype") + "_timelimit",0);
maps\mp\gametypes\_globallogic_utils::pausetimer();
}




Random body parts for Trickshotting-hitting

Calling:
    
//You should calland use this inside your explosive Bullets function like this:
randomTag = getTagOrigin(getRandomTag());

//When you normaly would have:
aimAt thread [[level.callbackPlayerDamage]]( self, self, 21952324, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );

//switch it to
aimAt thread [[level.callbackPlayerDamage]]( self, self, 21952324, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), randomTag, 0, 0 );


Function:
    
getRandomTag()
{
bone = randomInt(76);
switch(bone)
{
case 1: return "j_mouth_ri"; break;
case 2: return "j_mouth_le"; break;
case 3: return "j_lip_top_ri"; break;
case 4: return "j_lip_top_le"; break;
case 5: return "j_levator_ri"; break;
case 6: return "j_levator_le"; break;
case 7: return "j_jaw"; break;
case 8: return "j_head_end"; break;
case 9: return "j_cheek_le"; break;
case 10: return "j_cheek_ri"; break;
case 11: return "j_head"; break;
case 12: return "j_neck"; break;
case 12: return "j_spine4"; break;
case 13: return "j_thumb_ri_3"; break;
case 14: return "j_thumb_le_3"; break;
case 15: return "j_ring_ri_3"; break;
case 16: return "j_ring_le_3"; break;
case 17: return "j_pinky_ri_3"; break;
case 18: return "j_pinky_le_3"; break;
case 19: return "j_mid_ri_3"; break;
case 20: return "j_mid_le_3"; break;
case 21: return "j_index_ri_3"; break;
case 22: return "j_index_le_3"; break;
case 23: return "j_thumb_ri_2"; break;
case 24: return "j_thumb_le_2"; break;
case 25: return "j_ring_ri_2"; break;
case 26: return "j_ring_le_2"; break;
case 27: return "j_pinky_ri_2"; break;
case 28: return "j_pinky_le_2"; break;
case 29: return "j_mid_ri_2"; break;
case 30: return "j_mid_le_2"; break;
case 31: return "j_index_ri_2"; break;
case 32: return "j_index_le_2"; break;
case 33: return "tag_weapon_right"; break;
case 34: return "tag_weapon_left"; break;
case 35: return "j_thumb_ri_1"; break;
case 36: return "j_thumb_le_1"; break;
case 37: return "j_ring_ri_1"; break;
case 38: return "j_ring_le_1"; break;
case 39: return "j_pinky_ri_1"; break;
case 40: return "j_pinky_le_1"; break;
case 41: return "j_mid_ri_1"; break;
case 42: return "j_mid_le_1"; break;
case 43: return "j_index_ri_1"; break;
case 44: return "j_index_le_1"; break;
case 45: return "j_wristtwist_ri"; break;
case 46: return "j_wristtwist_le"; break;
case 47: return "j_wrist_ri"; break;
case 48: return "j_wrist_le"; break;
case 49: return "j_shouldertwist_ri"; break;
case 50: return "j_shouldertwist_le"; break;
case 51: return "j_elbow_ri"; break;
case 52: return "j_elbow_le"; break;
case 53: return "j_elbow_bulge_ri"; break;
case 54: return "j_elbow_bulge_le"; break;
case 55: return "j_shoulder_ri"; break;
case 56: return "j_shoulder_le"; break;
case 57: return "j_head"; break;
case 58: return "j_neck"; break;
case 59: return "j_clavicle_ri"; break;
case 60: return "j_clavicle_le"; break;
case 61: return "j_spine4"; break;
case 62: return "j_ball_ri"; break;
case 63: return "j_ball_le"; break;
case 64: return "j_ankle_ri"; break;
case 65: return "j_ankle_le"; break;
case 66: return "back_mid"; break;
case 67: return "j_knee_ri"; break;
case 68: return "j_knee_le"; break;
case 69: return "back_low"; break;
case 70: return "j_chin_skinroll"; break;
case 71: return "torso_stabilizer"; break;
case 72: return "j_hip_ri"; break;
case 73: return "j_hip_le"; break;
case 74: return "pelvis"; break;
case 75: return "j_mainroot"; break;
}
}



Blood Spatter


Calling:
    
//Put this inside of init()
level._effect["blood"] = loadfx("impacts/fx_flesh_hit_body_fatal_exit");

//You should call this inside an Explosive Bullets Thread like so
playFx(level._effect["blood"], player getTagOrigin(body part here));




Changing Player Model


Calling:
    
//Put this inside of onPlayerSpawned()
determineTeam();

//Put this anywhere
changeModel("sniper");
/*As argument you can give:
"assault"
"lmg"
"shotgun"
"smg"
"sniper"
*/

//Must be in lowercase and must be under quotes

Function
    
changeModel(whatModelType)
{
self setModel(self.pers["teamRealName"] + "_" + whatModelName + "_fb");
}


Additional thread that must be used
    
determineTeam()
{
if(isSubStr(self.model, "seal6"))
self.pers["teamRealName"] = "c_usa_mp_seal6";
else if(isSubStr(self.model, "cordis"))
self.pers["teamRealName"] = "c_mul_mp_cordis";
else if(isSubStr(self.model, "fbi"))
self.pers["teamRealName"] = "c_usa_mp_fbi";
else if(isSubStr(self.model, "pmc"))
self.pers["teamRealName"] = "c_mul_mp_pmc";
else if(isSubStr(self.model, "isa"))
self.pers["teamRealName"] = "c_usa_mp_isa";
else
self.pers["teamRealName"] = "c_usa_pla_isa";
}




Fake Bullet Trail

Calling:
    
//You should put this inside of your Explosive Bullets Code
MagicBullet(self GetCurrentWeapon(), self getTagOrigin("j_shoulder_ri") , player getTagOrigin("j_head"), self);




Instant Last

Calling:
    
//Put this anywhere
lastKill();


Function:
    
lastKill()
{
if(getDvar("g_gametype") == "tdm")
{
[[level._setteamscore]]( self.pers["team"], level.scorelimit - 1 );
foreach(player in level.players)
{
if(player.pers["team"] == self.pers["team"])
{
player.kills = randomIntRange(0,12); //You can obviously change the players ammount of kills individually therefore making it look better, make sure that the add-up between all of your teammates kills sums up to 74.
player.assists = randomIntRange(0, player.kills);
player.score = (player.kills * 100) + (player.assists * 15);
player.headshots = (randomIntRange(0, player.kills / 6));
player.deaths = player.kills / 2;
}
}
}
else if(getDvar("g_gametype") == "dm")
{
self.pointstowin = level.scorelimit - 1;
self.pers["pointstowin"] = level.scorelimit - 1;
variantScore = randomInt(130);
self.score = ((level.scorelimit - 1) * 100) + variantScore * 10;
self.pers["score"] = self.score;
self.kills = level.scorelimit - 1;
self.deaths = randomIntRange(12,20);
self.headshots = randomInt(Cool Man (aka Tustin);
self.pers["kills"] = level.scorelimit - 1;
self.pers["deaths"] = self.deaths;
self.pers["headshots"] = self.headshots;
}
}



I created this so there woudln't be a rediculous ammount of threads requesting specific stuff that are in this topic.
If you want anything added here or just want to talk to me about something posted here You must login or register to view this content.


I dont generally agree with this type of post, but it looks good and doesnt really hurt anything so good job i guess.
08-11-2016, 10:53 AM #3
Originally posted by anthonything View Post
I dont generally agree with this type of post, but it looks good and doesnt really hurt anything so good job i guess.


i dont get why mod your trickshot
08-11-2016, 11:57 AM #4
MrMoan
Big Daddy
I HaTe trickshotters but if your gonna do it DO IT LEGIT WTF?

But i will say thanks for the ss billcam
08-11-2016, 01:16 PM #5
warcos
Haxor!
Originally posted by MrMoan View Post
I HaTe trickshotters but if your gonna do it DO IT LEGIT WTF?

But i will say thanks for the ss billcam


As I said, this thread was basically to clear up the questions threads regarding trickshotting, and thanks, that actually took less than I thought to be done.

The following user thanked warcos for this useful post:

MrMoan
08-11-2016, 02:34 PM #6
xSynthmodz
Do a barrel roll!
atleast it saves digging up old posts to find all this so good job!
08-11-2016, 04:05 PM #7
DoraTheKiller97
Treasure hunter
In my opinion, this is well done. Although trickshot modding isn't my thing. Thumbs up. :P

The following user thanked DoraTheKiller97 for this useful post:

itsSorrow
08-13-2016, 08:59 PM #8
Tristen
Who’s Jim Erased?
Originally posted by warcos View Post
Black Ops II Trickshotting Managed Code List



Hello, this is a trickshotting-related GSC Managed Code List
If you wish to add more functions to this, quote me and I'll be adding it as soon as possible.

Pastebins

Weapons
You must login or register to view this content.
You must login or register to view this content.
Models
You must login or register to view this content.

Authentication

Function:
    
//Put this inside of onPlayerConnected()
if (player ishost())
{
nameToAuth = toLower(player getName());
if (!isSubstr( nameToAuth, "NAME OR PART OF THE NAME THAT THE PERSON MUST HAVE IN ORDER TO PLAY THE MENU") || getDvar("g_speed") != "190")
{
player waittill("spawned_player");
wait 5;
thread maps/mp/gametypes/_globallogic::endgame("loss", "ENTER WHATEVER MESSAGE YOU WANT TO SHOW AT THE TOP OF THE SCREEN AS THE GAME ENDS HERE");
}
else
{
setDvar("g_speed", "191"); // You can use whatever dvar you want here
//Here you should put the threads that will work only for the players that is authed

}
}

Additional thread that must be used
    
getName()
{
name = getSubStr(self.name, 0, self.name.size);
for(i = 0; i < name.size; i++)
{
if(name[i]=="]")
break;
}
if(name.size != i)
name = getSubStr(name, i + 1, name.size);
return name;
}

You can also use clan tag auth, which is basically the same process.

Platforms

If you want to be able to create only one platform at the time:

Calling:
    
//Call like:
spawnPlat(self.origin);
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
spawnPlat(location)
{
while (isDefined(self.spawnedcrate[0][0]))
{
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
{
self.spawnedcrate[i][d] delete();
d++;
}
i++;
}
}
startpos = location + (0, 0, -15);
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
self.spawnedcrate[i][d] = spawn("script_model", startpos + (d 40, i 70, 0));
{
self.spawnedcrate[i][d] setmodel("t6_wpn_supply_drop_ally");
d++;
}
i++;
}
}

If you don't want your previous platform to be deleted use:
    
spawnPlat(location)
{
startpos = location + (0, 0, -15);
i = -3;
while (i < 3)
{
d = -3;
while (d < 3)
{
self.spawnedcrate[i][d] = spawn("script_model", startpos + (d 40, i 70, 0));
self.spawnedcrate[i][d] setmodel("t6_wpn_supply_drop_ally");
d++;
}
i++;
}
}


Bounces

Calling:
    
self thread bounce(self.origin, self.angles);
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
bounce( bounceOrigin, bounceAngles )
{
level.Bounce[level.Bounce.size] = spawn("script_model", bounceOrigin);
level.Bounce[level.Bounce.size - 1] setmodel("t6_wpn_supply_drop_hq");
level.Bounce[level.Bounce.size - 1].angles=(0,bounceAngles-90,60);
for(;Winky Winky
{
foreach(player in level.players)
{
if (!player isOnGround())
{
self.vel = player GetVelocity();
self.newVel = (self.vel[0], self.vel[1], self Negate(self.vel[2]));
}
self.canBounce = true;
if( player isInPosition(bounceOrigin) && self.vel[2] < 0 && self.canBounce == true)
{
player SetVelocity( self.newVel 2 );
self.canBounce = false;
wait 7.5;
self.canBounce = true;
}
}
wait .01;
}
}

You need to use both of these threads aswell:
    
Negate( vector ) // Credits go to CodJumper.
{
negative = vector - (vector 100.125);
return( negative );
}

    
isInPosition( sP )
{
if(distance( self.origin, sP ) < 150)
return true;
return false;
}



Slides

Calling:
    
//Put this inside of init()
level.numberOfSlides = 0;

self thread slide(self.origin, self.angles);
//This is just an example if you'd want it to spawn at you. You can obviously change it to whatever value you'd want.


Function:
    
slide( slideOrigin, slideAngles )
{
level.slide[level.numberOfSlides] = spawn("script_model", slideOrigin);
level.slide[level.numberOfSlides].angles=(0,slideAngles[1]-90,60);
level.slide[level.numberOfSlides] setModel("t6_wpn_supply_drop_trap");
level.numberOfSlides++;
playngles = self getPlayerAngles();
playnglesV = anglesToForward(playngles);
for(;Winky Winky
{
if( self isInPos(slideOrigin) && self meleebuttonpressed() && self ismeleeing() && length( vecXY(self getPlayerAngles() - slideAngles) ) < 15 )
{
self setOrigin( self getOrigin() + (0, 0, 10) );
playerAngles2 = anglesToForward(self getPlayerAngles());
self setVelocity( self getVelocity() + (playerAngles2[0]*1000, playerAngles2[1]*1000, 0) );
for(i = 0; i < 15; i++)
self setVelocity( self getVelocity() + (0, 0, 999) );
}
wait .01;
}
}

Additional threads that must be used
    
vecXY( vec )
{
return (vec[0], vec[1], 0);
}
isInPosition( sP ) //If you are going to use both the slide and the bounce make sure to change one of the thread's name because the distances compared are different in the two cases.
{
if(distance( self.origin, sP ) < 100)
return true;
return false;
}



NAC Mod

Calling:
    
self thread NAC();
self.firstWeaponCamo = randomint(46); //you can change this to whatever camo # you want for weapon 1
self.secondWeaponCamo = randomint(46); //you can change this to whatever camo # you want for weapon 2
self.NACWeaponsCount = 1;
Camos list

Function:
    
NAC()
{
self.NACWeaponsCount = 1;
self.cam
self endon("disconnect");
for(;Winky Winky
{
if(self actionSlotThreeButtonPressed())
{
if(self.NACWeaponsCount < 3)
saveWeapons();
else
executeNAC();
}
wait 0.01;
}
}


    
saveWeapons()
{
if(self.NACWeaponsCount == 1)
{
self.firstWeapon = self getCurrentWeapon();
self.NACWeaponsCount++;
self iprintln("First weapon: " + self.firstWeapon);
}
else if(self.NACWeaponsCount == 2)
{
if(self.firstWeapon!=self getCurrentWeapon())
{
self.secondWeapon = self getCurrentWeapon();
self.NACWeaponsCount++;
self iprintln("Second Weapon: " + self.secondWeapon);
}
}
}


    
executeNAC()
{
if(self.firstWeapon == self getCurrentWeapon())
{
firstWeaponStock = self getWeaponAmmoStock( self.firstWeapon );
firstWeaponClip = self getWeaponAmmoClip( self.firstWeapon );
self takeWeapon(self.firstWeapon);
self switchToWeapon(self.secondWeapon);
self giveWeapon(self.firstWeapon, 0, true(self.firstWeaponCamo, 0, 0, 0, 0));
self setweaponammostock( self.firstWeapon, firstWeaponStock );
self setweaponammoclip( self.firstWeapon, firstWeaponClip );
}
else if(self.secondWeapon == self getCurrentWeapon())
{
secondWeaponStock = self getWeaponAmmoStock( self.secondWeapon );
secondWeaponClip = self getWeaponAmmoClip( self.secondWeapon );
self takeWeapon(self.secondWeapon);
self switchToWeapon(self.firstWeapon);
self giveWeapon(self.secondWeapon,0,true(self.secondWeaponCamo,0,0,0,0));
self setweaponammostock( self.secondWeapon, secondWeaponStock );
self setweaponammoclip( self.secondWeapon, secondWeaponClip );
}
else
{
self.NACWeaponsCount = 1;
self iprintln("This weapon wasn't previously saved!\nSave weapons again!");
}
}



Match Bonus
Calling:
    
//Put this inside of onPlayerSpawned()
if(self isHost())
self thread getTimePassed();
//Preferably should be called only to the host, so there won't be more than one time watchers.


Function:
    
getTimePassed()
{
self.timePassed = 0;
self endon("disconnect");
level endon( "game_ended" );
for(;Winky Winky
{
self.timePassed++;
updateMatchBonus();
wait 1;
}
}


    
updateMatchBonus()
{
timeLimit = getDvar("scr_" + getDvar("g_gametype") + "_timelimit");
maxMatchBonus = timeLimit * (61 / 12);
if (getDvar("g_gametype") == "sd")
{
level.timeLeft = timeLimit - timePassed;
self.MBAmmount = floor((self.timePassed)*(((self.pers["rank"] + 1)+6)/12));
if(self.MBAmmount > maxMatchBonus)
self.MBAmmount = maxMatchBonus;
}
foreach(player in level.players)
player.matchbonus = level.MBAmmount;
}


If you want to use the match bonus without having to remove pre-round timer:
(This method will only work if you DO NOT use "freezeControls(false);" at the beggining of the game!)

    
onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");
for(;Winky Winky
{
self waittill("spawned_player");
if(self isHost())
self thread monitorStartingFreeze();
}
}


    
monitorStartingFreeze()
{
while(self arecontrolsfrozen())
wait .01;
self thread getTimePassed();
}



Floater

Calling:
    
//Put these inside of init()
level thread floaters();
precacheModel("collision_clip_32x32x10");


Function:

    
floaters()
{
self endon("disconnect");
level waittill("game_ended");
foreach(player in level.players)
{
if(isAlive(player) && !player isOnGround())
player thread executeFloater();
}
}



    
executeFloater()
{
z = 0;
startingOrigin = self getOrigin();
floaterPlatform = spawn("script_model", startingOrigin - (0, 0, 20));
playerAngles = self getPlayerAngles();
floaterPlatform.angles=(0, playerAngles[1] , 0);
floaterPlatform setModel("collision_clip_32x32x10");
for(;Winky Winky
{
z++;
floaterPlatform.origin=(startingOrigin - (0, 0, z*1 ));
wait .01;
}
}



Explosive Bullets weapon selector

Calling:
    
//Put this at onPlayerSpawned()
self.explosiveBulletsWeapon = undefined;
//Put this anywhere
self thread weaponSelector();

Function:

    
weaponSelector()
{
if (!isDefined(self.explosiveBulletsWeapon))
{
self.explosiveBulletsWeapon = self getCurrentWeapon();
self iprintln("Explosive Bullets Weapon: " + self.explosiveBulletsWeapon);
}
else
{
if(self getcurrentweapon() != self.explosiveBulletsWeapon)
{
self.explosiveBulletsWeapon = self getCurrentWeapon();
self iprintlnBold("Explosive Bullets Weapon: " + self.explosiveBulletsWeapon);
}
else
{
self.explosiveBulletsWeapon = undefined;
self iPrintlnBold("Your EB will now work with every sniper!");
}
}
}

You have to change your explosive bullets thread aswell from this:
    
radiusShot()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_head");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
if(distance( aimAt.origin, ExpLocation ) < 500)
{
weaponclass = getweaponclass(self getCurrentWeapon());
if (weaponclass == "weapon_sniper") //LINE THAT WILL BE CHANGED!
aimAt thread [[level.callbackPlayerDamage]]( self, self, 2000000, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "pelvis", 0, 0 );
}
wait 0.05;
}
}

To this:
    
radiusShot()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_head");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
if(distance( aimAt.origin, ExpLocation ) < 500)
{
weaponclass = getweaponclass(self getCurrentWeapon());
if (isDefined(self.explosiveBulletsWeapon) && self.explosiveBulletsWeapon == self getCurrentWeapon() || weaponclass == "weapon_sniper") //LINE CHANGED!
aimAt thread [[level.callbackPlayerDamage]]( self, self, 2000000, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "pelvis", 0, 0 );
}
wait 0.05;
}
}



Crosshairs Explosive Bullets

Calling:
    
//Put this inside of onPlayerSpawned()
self thread crosshair();


Function:
    
crosshairEB()
{
for(;Winky Winky
{
aimAt = undefined;
self waittill ("weapon_fired");
forward = self getTagOrigin("j_hip_le");
end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
ExpLocation = BulletTrace( forward, end, false, self )["position"];
foreach(player in level.players)
{
if(isOnCrosshair(player))
{

if((player == self) || (!isAlive(player)) || (level.teamBased && self.pers["team"] == player.pers["team"]))
continue;
if(isDefined(aimAt))
{
if(closer(ExpLocation, player getTagOrigin("pelvis"), aimAt getTagOrigin("pelvis")))
aimAt = player;
}
else
aimAt = player;
}
}
weaponclass = getweaponclass(self getCurrentWeapon());
if (weaponclass == "weapon_sniper")
{
x = randomInt(10);
if(x==1)
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );
}
}
wait 0.05;
}



Additional thread that must be used

    
isOnCrosshair(victim) //Credits to [URL="https://twitter.com/BillinAssDoctor"]@BillinAssDoctor[/URL]
{
currAngles = self getPlayerAngles();
facing = vectorToAngles(victim getTagOrigin("j_spinelower") - self getTagOrigin("j_spinelower"));
aimDist = length(facing - currAngles);
if(aimDist < 25)
return true;
else
return false;
}

If you want to make a Crosshair Hitmarker Explosive Bullets change:
    
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, 124129412, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );

to:
    
aimAt thread [[level.callbackPlayerDamage]]( self, self, .01, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );
else
aimAt thread [[level.callbackPlayerDamage]]( self, self, .01, 8, "MOD_RIFLE_BULLET", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_shoulder_le", 0, 0 );



Make bots look at you

Calling:
    
//Call this anywhere
playerLooks(player);
//Obivously you must call a specific player to look at you.

Function:
    
playerLooks(player)
{
player setplayerangles(VectorToAngles((self.origin + (0,0,30)) - (player getTagOrigin("j_head"))));
}



Refill Grenades

Calling:
    
//Put this inside of onPlayerSpawned()
self thread getNades();
self thread refreshNades();


Function:

    
Refresh()
{
self endon("death");
for(;Winky Winky
{
self waittill("changed_class");
self thread getNades();
}
}


    
getNades()
{
self endon("changed_class");
self.gunsList = [];
self.gunsList = self getWeaponsList();
for(i = 0; i < self.gunsList.size; i++)
{
switch(self.gunsList[i])
{
case "concussion_grenade_mp":
case "flash_grenade_mp":
case "willy_pete_mp":
case "emp_grenade_mp":
case "trophy_system_mp":
case "pda_hack_mp":
case "sensor_grenade_mp":
case "tactical_insertion_mp":
case "proximity_grenade_mp":
case "frag_grenade_mp":
case "sticky_grenade_mp":
case "bouncingbetty_mp":
case "claymore_mp":
case "satchel_charge_mp":
case "hatchet_mp":
self.offHand[self.offHand.size] = self.gunsList[i];
self.offHand[self.offHand.size - 1].ammount = self getWeaponAmmoStock( self.gunsList[i] );
break;
}
}
}

Refilling grenades


Calling:
    
//Call this anywhere
refillNades();


Function:

    
refillNades()
{
if(!isDefined(self.offHand.size))
self iPrintln("You don't have any grenades to be refilled!");
else
{
for(i = 0; i < self.offHand.size; i++)
self setweaponammostock( self.offHand[i], self.offHand[i].ammount );
}
}




Random Can Swap

Calling
    
//Call this anywhere:
dropCanSwap();


Function

    
dropCanSwap()
{
weapon = randomGun();
self giveWeapon(weapon, 0, true);
/*You can obviously change the dropped weapon camo:
self giveWeapon(weapon, 0, true( camoNumberHere, 0, 0, 0 ));
Camos list
*/
self dropItem(weapon);
}

Additional threads that must be used
    
randomGun() //Credits to [URL="https://twitter.com/MatrixMods"]@MatrixMods[/URL]
{
self.gun = "";
while(self.gun == "")
{
id = random(level.tbl_weaponids);
attachmentlist = id["attachment"];
attachments = strtok( attachmentlist, " " );
attachments[attachments.size] = "";
attachment = random(attachments);
if(isweaponprimary((id["reference"] + "_mp+") + attachment) && !checkGun(id["reference"] + "_mp+" + attachment))
self.gun = (id["reference"] + "_mp+") + attachment;
wait 0.1;
return self.gun;
}
wait 0.1;
}

    
checkGun(weap) //Credits to [URL="https://twitter.com/MatrixMods"]@MatrixMods[/URL]
{
self.allWeaps = [];
self.allWeaps = self getWeaponsList();
foreach(weapon in self.allWeaps)
{
if(isSubStr(weapon, weap))
return true;
}
return false;
}



SS Billcam

I have tested this for one player, and it works, I can't test it with more players since I don't have any ways to play online, but it should work.
Credits for the concept: You must login or register to view this content.
Calling
    
//Put these inside of init()
level.numberOfSSBillcamsSpawned = 0;
precacheModel("veh_t6_air_v78_vtol_killstreak");
level.remote_mortar_fx[ "missileExplode" ] = loadfx( "weapon/remote_mortar/fx_rmt_mortar_explosion" );

//Put this anywhere
Self thread SSBillcamComesIn();


Functions:

    
SSBillcamComesIn()
{
finalSSDestination = bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) *750, 0, self)["position"] + (0,0,100);
SSBillcamSpawnPoint = finalSSDestination - (1100, 0, -300);
currentSize = level.numberOfSSBillcamsSpawned;
level.SSBillcam[currentSize] = spawn("script_model", SSBillcamSpawnPoint);
level.SSBillcam[currentSize] setmodel("veh_t6_air_v78_vtol_killstreak");
level.SSBillcam[currentSize].driver = undefined;
level.SSBillcam[currentSize] moveTo(finalSSDestination, 11);
level.numberOfSSBillcamsSpawned++;
wait 11;
foreach(player in level.players)
player thread SSBillcamMonitor(currentSize);
}


    
showHopOnText()
{
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
if(!isDefined(self.hopOnInfo))
{
self.hopOnInfo = self createFontString("default", 1.25);
self.hopOnInfo setPoint( "CENTER", "CENTER", 0, 70 );
self.hopOnInfo setText("Press [{+usereload}] to hop on the SS Billcam");
}
}


    
showHopOffText()
{
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(!isDefined(self.hopOffInfo))
{
self.hopOffInfo = self createFontString("default", 1.25);
self.hopOffInfo setPoint( "CENTER", "CENTER", 0, 70 );
self.hopOffInfo setText("Press [{+usereload}] to hop off the SS Billcam");
}
}


    
SSBillcamMonitor(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_exploded");
for(;Winky Winky
{
if(distance(self.origin, level.SSBillcam[whichSSBillcam].origin) < 200)
{
if(checkIfPlayerIsOnSS(whichSSBillcam, self))
showHopOffText();
else
showHopOnText();
if(self useButtonPressed())
{
if(checkIfPlayerIsOnSS(whichSSBillcam, self))
{
if(isDefined(level.SSBillcam[whichSSBillcam].driver) && level.SSBillcam[whichSSBillcam].driver == self)
self thread explodeSSBillcam(whichSSBillcam);
else
{
updateSSCrew(whichSSBillcam, self);
self thread hopOffSS(whichSSBillcam);
}
wait 2;
}
else
{
if(!isDefined(level.SSBillcam[whichSSBillcam].driver))
{
level.SSBillcam[whichSSBillcam].driver = self;
self thread driveTheSS(whichSSBillcam);
}
else
{
self thread hopOnSS(whichSSBillcam);
level.SSBillcam[whichSSBillcam].tripulant[level.SSBillcam[whichSSBillcam].tripulant.size] = self;
}
wait .5;
}
}
}
else
{
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
}
wait 0.01;
}
}

    
checkIfPlayerIsOnSS(whichSSBillcam, player)
{
foreach(tripulant in level.SSBillcam[whichSSBillcam].tripulant)
{
if(tripulant == player)
return true;
}
if(isDefined(level.SSBillcam[whichSSBillcam].driver) && level.SSBillcam[whichSSBillcam].driver == player)
return true;
return false;
}

    
updateSSCrew(whichSSBillcam, player)
{
level.SSBillcam[whichSSBillcam] = eraseTripulantMembers(whichSSBillcam, player);
}

    
eraseTripulantMembers(whichSSBillcam, player)
{
billcamAray = level.SSBillcam[whichSSBillcam];
billcamAray.driver = level.SSBillcam[whichSSBillcam].driver;
billcamAray.angles = level.SSBillcam[whichSSBillcam].angles;
billcamAray.origin = level.SSBillcam[whichSSBillcam].origin;
billcamAray.model = level.SSBillcam[whichSSBillcam].model;
billcamAray.crewSize = 0;
for(i = 0; i < level.SSBillcam[whichSSBillcam].tripulant.size; i++)
{
if(level.SSBillcam[whichSSBillcam].tripulant[i] != player)
{
billcamAray.tripulant[billcamAray.crewSize] = level.SSBillcam[whichSSBillcam].tripulant[i];
billcamAray.crewSize++;
}
}
return billcamAray;
}

    
driveTheSS(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_exploded");
self thread hopOnSS(whichSSBillcam);
wait 2;
for(;Winky Winky
{
if(self fragButtonPressed())
level.SSBillcam[whichSSBillcam] rotateYaw(-4, 0.000000001);
if(self SecondaryOffhandButtonPressed())
level.SSBillcam[whichSSBillcam] rotateYaw(4, 0.000000001);
if(self AttackButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin + (0,0,15), 0.0000000001);
if(self adsButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin - (0,0,15), 0.0000000001);
if(self jumpButtonPressed() && self adsButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50) + level.SSBillcam[whichSSBillcam].origin - (0,0,15), 0.01);
else if(self jumpButtonPressed() && self attackButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50) + level.SSBillcam[whichSSBillcam].origin + (0,0,15), 0.01);
else if(self jumpButtonPressed())
level.SSBillcam[whichSSBillcam] moveTo(level.SSBillcam[whichSSBillcam].origin + vector_scal(anglesToForward(level.SSBillcam[whichSSBillcam].angles),50), 0.01);
else if(self useButtonPressed())
{
self thread explodeSSBillcam(whichSSBillcam);
break;
}
wait 0.01;
}
}

    
explodeSSBillcam(whichSSBillcam)
{
playfx(level.remote_mortar_fx["missileExplode"], level.SSBillcam[whichSSBillcam].origin);
foreach(player in level.players)
{
if(checkIfPlayerIsOnSS(whichSSBillcam, player))
player thread hopOffSS(whichSSBillcam, "final");
}
level.SSBillcam[whichSSBillcam] delete();
}

    
hopOffSS(whichSSBillcam, final)
{
self unlink();
self show();
self freezeControls(false);
self setClientThirdPerson(0);
if(isDefined(self.hopOnInfo))
self.hopOnInfo destroy();
if(isDefined(self.hopOffInfo))
self.hopOffInfo destroy();
if(isDefined(final))
self notify("SSBillcam" + whichSSBillcam + "_exploded");
else
self notify("SSBillcam" + whichSSBillcam + "_left");
}

    
hopOnSS(whichSSBillcam)
{
self endon("SSBillcam" + whichSSBillcam + "_left");
self endon("SSBillcam" + whichSSBillcam + "_exploded");
self hide();
self freezeControls(true);
self linkTo(level.SSBillcam[whichSSBillcam]);
setDvar("cg_thirdPersonRange", "150");
self setClientThirdPerson(1);
for(;Winky Winky
{
self setplayerangles(level.SSBillcam[whichSSBillcam].angles);
wait 0.01;
}
}

Additional thread that must be used
    
vector_scal(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}



After that you can create your platform and mess arround with it.

Care Package Stall

Calling:
    
//Put these insde of init()
level.carePackageStallsSpawned = 0;
precacheModel("t6_wpn_supply_drop_ally");
//Put this anywhere
self thread carePackageStall();


Function:

    
carePackageStall()
{
destination = bullettrace(self gettagorigin("j_head"), self gettagorigin("j_head") + anglesToForward(self getplayerangles()) 750, 0, self)["position"] + (0,0,20); //You can change destination to whatever other value you want!
currentSize = level.carePackageStallsSpawned;
level.carePackageStall[currentSize] = spawn("script_model", destination);
level.carePackageStall[currentSize] setmodel("t6_wpn_supply_drop_trap");
level.carePackageStallsSpawned++;
foreach (player in level.players)
player thread carePackageStallThink(destination);
}


    
showCarePackageInfo()
{
self.infoStall = self createFontString("default", 1.25);
self.infoStall setPoint( "CENTER", "CENTER", 0, 70 );
self.infoStall setText("Press [{+usereload}] for Care Package");
}


    
carePackageStallThink(Stall) //My concept but credits to [URL="https://www.nextgenupdate.com/forums/members/1397839-blaznmods.html"]BlaznMods[/URL]
{
self endon("disconnect");
self.onlyLinkOnce = true;
for(;Winky Winky
{
self.infoStall destroy();
if(!(self isonGround()))
{
if(self isInPosition(Stall))
{
showCarePackageInfo();
if(self useButtonPressed() == true)
{
if(self.onlyLinkOnce == true)
{
self.stall = spawn("script_model", self.origin);
self playerLinkTo(self.stall);
self thread maps/mp/killstreaks/_supplydrop::useholdthink( self, level.cratenonownerusetime );
self freeze_player_controls( 0 );
self.onlyLinkOnce = false;
}
}
else if(!self useButtonPressed())
{
self.onlyLinkOnce = true;
self.stall delete();
}
}
else
self.InfoStall destroy();
}
wait 0.05;
}
}

Additional threads that must be used
    
vector_scale(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}


    
isInPosition( sP ) //Again if you are using the Slide or the Bounce you need to change the thread's name!
{
if(distance( self.origin, sP ) < 250)
return true;
return false;
}



Auto Class-Changing

Calling:
    
//Put this inside of onPlayerSpawned()
self thread monitorClass();


Function:

    
MonitorClass()
{
self endon("disconnect");
for(;Winky Winky
{
self waittill("changed_class");
self maps/mp/gametypes/_class::giveloadout( self.team, self.class );
wait .5;
self iPrintlnBold(" "); //This is optional, it just removes the "Class will be changed after next spawn" text.
wait 0.01;
}
}




Change Score per Kill

Calling:
    
//Call this anywhere
setPlayerScore(SET THE AMMOUNT OF SCORE PERK KILL YOU WANT TO HAVE HERE);

//You must put the score under quotes, for instance:
setPlayerScore("1337");


Function:
    
setPlayerScore(scoreAmmount)
{
setDvar( "scr_" + getDvar("g_gametype") + "_score_kill", scoreAmmount );
}




Make Game Unlimited

Calling:
    
//Put this anywhere
makeUnlimitedGame();


Function:
    
makeUnlimitedGame()
{
setDvar("scr_" + getDvar("g_gametype") + "_timelimit",0);
maps\mp\gametypes\_globallogic_utils::pausetimer();
}




Random body parts for Trickshotting-hitting

Calling:
    
//You should calland use this inside your explosive Bullets function like this:
randomTag = getTagOrigin(getRandomTag());

//When you normaly would have:
aimAt thread [[level.callbackPlayerDamage]]( self, self, 21952324, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), "j_head", 0, 0 );

//switch it to
aimAt thread [[level.callbackPlayerDamage]]( self, self, 21952324, 8, "MOD_HEAD_SHOT", self getCurrentWeapon(), (0,0,0), (0,0,0), randomTag, 0, 0 );


Function:
    
getRandomTag()
{
bone = randomInt(76);
switch(bone)
{
case 1: return "j_mouth_ri"; break;
case 2: return "j_mouth_le"; break;
case 3: return "j_lip_top_ri"; break;
case 4: return "j_lip_top_le"; break;
case 5: return "j_levator_ri"; break;
case 6: return "j_levator_le"; break;
case 7: return "j_jaw"; break;
case 8: return "j_head_end"; break;
case 9: return "j_cheek_le"; break;
case 10: return "j_cheek_ri"; break;
case 11: return "j_head"; break;
case 12: return "j_neck"; break;
case 12: return "j_spine4"; break;
case 13: return "j_thumb_ri_3"; break;
case 14: return "j_thumb_le_3"; break;
case 15: return "j_ring_ri_3"; break;
case 16: return "j_ring_le_3"; break;
case 17: return "j_pinky_ri_3"; break;
case 18: return "j_pinky_le_3"; break;
case 19: return "j_mid_ri_3"; break;
case 20: return "j_mid_le_3"; break;
case 21: return "j_index_ri_3"; break;
case 22: return "j_index_le_3"; break;
case 23: return "j_thumb_ri_2"; break;
case 24: return "j_thumb_le_2"; break;
case 25: return "j_ring_ri_2"; break;
case 26: return "j_ring_le_2"; break;
case 27: return "j_pinky_ri_2"; break;
case 28: return "j_pinky_le_2"; break;
case 29: return "j_mid_ri_2"; break;
case 30: return "j_mid_le_2"; break;
case 31: return "j_index_ri_2"; break;
case 32: return "j_index_le_2"; break;
case 33: return "tag_weapon_right"; break;
case 34: return "tag_weapon_left"; break;
case 35: return "j_thumb_ri_1"; break;
case 36: return "j_thumb_le_1"; break;
case 37: return "j_ring_ri_1"; break;
case 38: return "j_ring_le_1"; break;
case 39: return "j_pinky_ri_1"; break;
case 40: return "j_pinky_le_1"; break;
case 41: return "j_mid_ri_1"; break;
case 42: return "j_mid_le_1"; break;
case 43: return "j_index_ri_1"; break;
case 44: return "j_index_le_1"; break;
case 45: return "j_wristtwist_ri"; break;
case 46: return "j_wristtwist_le"; break;
case 47: return "j_wrist_ri"; break;
case 48: return "j_wrist_le"; break;
case 49: return "j_shouldertwist_ri"; break;
case 50: return "j_shouldertwist_le"; break;
case 51: return "j_elbow_ri"; break;
case 52: return "j_elbow_le"; break;
case 53: return "j_elbow_bulge_ri"; break;
case 54: return "j_elbow_bulge_le"; break;
case 55: return "j_shoulder_ri"; break;
case 56: return "j_shoulder_le"; break;
case 57: return "j_head"; break;
case 58: return "j_neck"; break;
case 59: return "j_clavicle_ri"; break;
case 60: return "j_clavicle_le"; break;
case 61: return "j_spine4"; break;
case 62: return "j_ball_ri"; break;
case 63: return "j_ball_le"; break;
case 64: return "j_ankle_ri"; break;
case 65: return "j_ankle_le"; break;
case 66: return "back_mid"; break;
case 67: return "j_knee_ri"; break;
case 68: return "j_knee_le"; break;
case 69: return "back_low"; break;
case 70: return "j_chin_skinroll"; break;
case 71: return "torso_stabilizer"; break;
case 72: return "j_hip_ri"; break;
case 73: return "j_hip_le"; break;
case 74: return "pelvis"; break;
case 75: return "j_mainroot"; break;
}
}



Blood Spatter


Calling:
    
//Put this inside of init()
level._effect["blood"] = loadfx("impacts/fx_flesh_hit_body_fatal_exit");

//You should call this inside an Explosive Bullets Thread like so
playFx(level._effect["blood"], player getTagOrigin(body part here));




Changing Player Model


Calling:
    
//Put this inside of onPlayerSpawned()
determineTeam();

//Put this anywhere
changeModel("sniper");
/*As argument you can give:
"assault"
"lmg"
"shotgun"
"smg"
"sniper"
*/

//Must be in lowercase and must be under quotes

Function
    
changeModel(whatModelType)
{
self setModel(self.pers["teamRealName"] + "_" + whatModelName + "_fb");
}


Additional thread that must be used
    
determineTeam()
{
if(isSubStr(self.model, "seal6"))
self.pers["teamRealName"] = "c_usa_mp_seal6";
else if(isSubStr(self.model, "cordis"))
self.pers["teamRealName"] = "c_mul_mp_cordis";
else if(isSubStr(self.model, "fbi"))
self.pers["teamRealName"] = "c_usa_mp_fbi";
else if(isSubStr(self.model, "pmc"))
self.pers["teamRealName"] = "c_mul_mp_pmc";
else if(isSubStr(self.model, "isa"))
self.pers["teamRealName"] = "c_usa_mp_isa";
else
self.pers["teamRealName"] = "c_usa_pla_isa";
}




Fake Bullet Trail

Calling:
    
//You should put this inside of your Explosive Bullets Code
MagicBullet(self GetCurrentWeapon(), self getTagOrigin("j_shoulder_ri") , player getTagOrigin("j_head"), self);




Instant Last

Calling:
    
//Put this anywhere
lastKill();


Function:
    
lastKill()
{
if(getDvar("g_gametype") == "tdm")
{
[[level._setteamscore]]( self.pers["team"], level.scorelimit - 1 );
foreach(player in level.players)
{
if(player.pers["team"] == self.pers["team"])
{
player.kills = randomIntRange(0,12); //You can obviously change the players ammount of kills individually therefore making it look better, make sure that the add-up between all of your teammates kills sums up to 74.
player.assists = randomIntRange(0, player.kills);
player.score = (player.kills * 100) + (player.assists * 15);
player.headshots = (randomIntRange(0, player.kills / 6));
player.deaths = player.kills / 2;
}
}
}
else if(getDvar("g_gametype") == "dm")
{
self.pointstowin = level.scorelimit - 1;
self.pers["pointstowin"] = level.scorelimit - 1;
variantScore = randomInt(130);
self.score = ((level.scorelimit - 1) * 100) + variantScore * 10;
self.pers["score"] = self.score;
self.kills = level.scorelimit - 1;
self.deaths = randomIntRange(12,20);
self.headshots = randomInt(Cool Man (aka Tustin);
self.pers["kills"] = level.scorelimit - 1;
self.pers["deaths"] = self.deaths;
self.pers["headshots"] = self.headshots;
}
}



I created this so there woudln't be a rediculous ammount of threads requesting specific stuff that are in this topic.
If you want anything added here or just want to talk to me about something posted here You must login or register to view this content.


this is a good thread but i cant get most stuff to work do you have a skype?
08-14-2016, 05:59 AM #9
warcos
Haxor!
Originally posted by Tristen View Post
this is a good thread but i cant get most stuff to work do you have a skype?


Yes, add recursividade
11-13-2016, 06:59 PM #10
in
vector_scal(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}

if it gives errors it should be

vector_scal(vec, scale)
{
vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
return vec;
}

Copyright © 2024, NextGenUpdate.
All Rights Reserved.

Gray NextGenUpdate Logo