//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
}
}
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;
}
//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.
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++;
}
}
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++;
}
}
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.
Bounce( bounceOrigin, bounceAngles )
{
level endon("game_ended");
for(;
{
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;
}
}
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;
}
//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.
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(;
{
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;
}
}
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;
}
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
NAC()
{
self endon("disconnect");
for(;
{
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!");
}
}
//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.
getTimePassed()
{
self.timePassed = 0;
self endon("disconnect");
level endon( "game_ended" );
for(;
{
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;
}
onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");
for(;
{
self waittill("spawned_player");
if(self isHost())
self thread monitorStartingFreeze();
}
}
monitorStartingFreeze()
{
while(self arecontrolsfrozen())
wait .01;
self thread getTimePassed();
}
//Put these inside of init()
level thread floaters();
precacheModel("collision_clip_32x32x10");
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(;
{
z++;
floaterPlatform.origin=(startingOrigin - (0, 0, z*1 ));
wait .01;
}
}
//Put this at onPlayerSpawned()
self.explosiveBulletsWeapon = undefined;
//Put this anywhere
self thread weaponSelector();
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!");
}
}
}
radiusShot()
{
for(;
{
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;
}
}
radiusShot()
{
for(;
{
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;
}
}
//Put this inside of onPlayerSpawned()
self thread crosshair();
crosshairEB()
{
for(;
{
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;
}
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;
}
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 );
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 );
//Call this anywhere
playerLooks(player);
//Obivously you must call a specific player to look at you.
playerLooks(player)
{
player setplayerangles(VectorToAngles((self.origin + (0,0,30)) - (player getTagOrigin("j_head"))));
}
//Put this inside of onPlayerSpawned()
self thread getNades();
self thread refreshNades();
Refresh()
{
self endon("death");
for(;
{
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;
}
}
}
//Call this anywhere
refillNades();
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 );
}
}
//Call this anywhere:
dropCanSwap();
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);
}
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;
}
//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();
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(;
{
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(;
{
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(;
{
self setplayerangles(level.SSBillcam[whichSSBillcam].angles);
wait 0.01;
}
}
vector_scal(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}
//Put these insde of init()
level.carePackageStallsSpawned = 0;
precacheModel("t6_wpn_supply_drop_ally");
//Put this anywhere
self thread carePackageStall();
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(;
{
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;
}
}
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;
}
//Put this inside of onPlayerSpawned()
self thread monitorClass();
MonitorClass()
{
self endon("disconnect");
for(;
{
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;
}
}
//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");
setPlayerScore(scoreAmmount)
{
setDvar( "scr_" + getDvar("g_gametype") + "_score_kill", scoreAmmount );
}
//Put this anywhere
makeUnlimitedGame();
makeUnlimitedGame()
{
setDvar("scr_" + getDvar("g_gametype") + "_timelimit",0);
maps\mp\gametypes\_globallogic_utils::pausetimer();
}
//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 );
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;
}
}
//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));
//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
changeModel(whatModelType)
{
self setModel(self.pers["teamRealName"] + "_" + whatModelName + "_fb");
}
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";
}
//You should put this inside of your Explosive Bullets Code
MagicBullet(self GetCurrentWeapon(), self getTagOrigin("j_shoulder_ri") , player getTagOrigin("j_head"), self);
//Put this anywhere
lastKill();
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(;
self.pers["kills"] = level.scorelimit - 1;
self.pers["deaths"] = self.deaths;
self.pers["headshots"] = self.headshots;
}
}
//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
}
}
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;
}
//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.
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++;
}
}
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++;
}
}
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.
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(;
{
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;
}
}
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;
}
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.
slide( slideOrigin, slideAngles )
{
playngles = self getPlayerAngles();
playnglesV = anglesToForward(playngles);
for(;
{
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;
}
}
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;
}
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
NAC()
{
self.NACWeaponsCount = 1;
self.cam
self endon("disconnect");
for(;
{
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!");
}
}
//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.
getTimePassed()
{
self.timePassed = 0;
self endon("disconnect");
level endon( "game_ended" );
for(;
{
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;
}
onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");
for(;
{
self waittill("spawned_player");
if(self isHost())
self thread monitorStartingFreeze();
}
}
monitorStartingFreeze()
{
while(self arecontrolsfrozen())
wait .01;
self thread getTimePassed();
}
//Put these inside of init()
level thread floaters();
precacheModel("collision_clip_32x32x10");
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(;
{
z++;
floaterPlatform.origin=(startingOrigin - (0, 0, z*1 ));
wait .01;
}
}
//Put this at onPlayerSpawned()
self.explosiveBulletsWeapon = undefined;
//Put this anywhere
self thread weaponSelector();
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!");
}
}
}
radiusShot()
{
for(;
{
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;
}
}
radiusShot()
{
for(;
{
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;
}
}
//Put this inside of onPlayerSpawned()
self thread crosshair();
crosshairEB()
{
for(;
{
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;
}
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;
}
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 );
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 );
//Call this anywhere
playerLooks(player);
//Obivously you must call a specific player to look at you.
playerLooks(player)
{
player setplayerangles(VectorToAngles((self.origin + (0,0,30)) - (player getTagOrigin("j_head"))));
}
//Put this inside of onPlayerSpawned()
self thread getNades();
self thread refreshNades();
Refresh()
{
self endon("death");
for(;
{
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;
}
}
}
//Call this anywhere
refillNades();
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 );
}
}
//Call this anywhere:
dropCanSwap();
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);
}
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;
}
//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();
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(;
{
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(;
{
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(;
{
self setplayerangles(level.SSBillcam[whichSSBillcam].angles);
wait 0.01;
}
}
vector_scal(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}
//Put these insde of init()
level.carePackageStallsSpawned = 0;
precacheModel("t6_wpn_supply_drop_ally");
//Put this anywhere
self thread carePackageStall();
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(;
{
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;
}
}
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;
}
//Put this inside of onPlayerSpawned()
self thread monitorClass();
MonitorClass()
{
self endon("disconnect");
for(;
{
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;
}
}
//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");
setPlayerScore(scoreAmmount)
{
setDvar( "scr_" + getDvar("g_gametype") + "_score_kill", scoreAmmount );
}
//Put this anywhere
makeUnlimitedGame();
makeUnlimitedGame()
{
setDvar("scr_" + getDvar("g_gametype") + "_timelimit",0);
maps\mp\gametypes\_globallogic_utils::pausetimer();
}
//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 );
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;
}
}
//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));
//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
changeModel(whatModelType)
{
self setModel(self.pers["teamRealName"] + "_" + whatModelName + "_fb");
}
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";
}
//You should put this inside of your Explosive Bullets Code
MagicBullet(self GetCurrentWeapon(), self getTagOrigin("j_shoulder_ri") , player getTagOrigin("j_head"), self);
//Put this anywhere
lastKill();
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(;
self.pers["kills"] = level.scorelimit - 1;
self.pers["deaths"] = self.deaths;
self.pers["headshots"] = self.headshots;
}
}
//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
}
}
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;
}
//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.
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++;
}
}
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++;
}
}
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.
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(;
{
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;
}
}
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;
}
//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.
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(;
{
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;
}
}
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;
}
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
NAC()
{
self.NACWeaponsCount = 1;
self.cam
self endon("disconnect");
for(;
{
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!");
}
}
//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.
getTimePassed()
{
self.timePassed = 0;
self endon("disconnect");
level endon( "game_ended" );
for(;
{
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;
}
onPlayerSpawned()
{
self endon("disconnect");
level endon("game_ended");
for(;
{
self waittill("spawned_player");
if(self isHost())
self thread monitorStartingFreeze();
}
}
monitorStartingFreeze()
{
while(self arecontrolsfrozen())
wait .01;
self thread getTimePassed();
}
//Put these inside of init()
level thread floaters();
precacheModel("collision_clip_32x32x10");
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(;
{
z++;
floaterPlatform.origin=(startingOrigin - (0, 0, z*1 ));
wait .01;
}
}
//Put this at onPlayerSpawned()
self.explosiveBulletsWeapon = undefined;
//Put this anywhere
self thread weaponSelector();
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!");
}
}
}
radiusShot()
{
for(;
{
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;
}
}
radiusShot()
{
for(;
{
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;
}
}
//Put this inside of onPlayerSpawned()
self thread crosshair();
crosshairEB()
{
for(;
{
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;
}
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;
}
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 );
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 );
//Call this anywhere
playerLooks(player);
//Obivously you must call a specific player to look at you.
playerLooks(player)
{
player setplayerangles(VectorToAngles((self.origin + (0,0,30)) - (player getTagOrigin("j_head"))));
}
//Put this inside of onPlayerSpawned()
self thread getNades();
self thread refreshNades();
Refresh()
{
self endon("death");
for(;
{
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;
}
}
}
//Call this anywhere
refillNades();
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 );
}
}
//Call this anywhere:
dropCanSwap();
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);
}
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;
}
//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();
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(;
{
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(;
{
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(;
{
self setplayerangles(level.SSBillcam[whichSSBillcam].angles);
wait 0.01;
}
}
vector_scal(vec, scale)
{
vec = (vec[0] scale, vec[1] scale, vec[2] scale);
return vec;
}
//Put these insde of init()
level.carePackageStallsSpawned = 0;
precacheModel("t6_wpn_supply_drop_ally");
//Put this anywhere
self thread carePackageStall();
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(;
{
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;
}
}
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;
}
//Put this inside of onPlayerSpawned()
self thread monitorClass();
MonitorClass()
{
self endon("disconnect");
for(;
{
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;
}
}
//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");
setPlayerScore(scoreAmmount)
{
setDvar( "scr_" + getDvar("g_gametype") + "_score_kill", scoreAmmount );
}
//Put this anywhere
makeUnlimitedGame();
makeUnlimitedGame()
{
setDvar("scr_" + getDvar("g_gametype") + "_timelimit",0);
maps\mp\gametypes\_globallogic_utils::pausetimer();
}
//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 );
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;
}
}
//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));
//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
changeModel(whatModelType)
{
self setModel(self.pers["teamRealName"] + "_" + whatModelName + "_fb");
}
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";
}
//You should put this inside of your Explosive Bullets Code
MagicBullet(self GetCurrentWeapon(), self getTagOrigin("j_shoulder_ri") , player getTagOrigin("j_head"), self);
//Put this anywhere
lastKill();
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(;
self.pers["kills"] = level.scorelimit - 1;
self.pers["deaths"] = self.deaths;
self.pers["headshots"] = self.headshots;
}
}
Copyright © 2024, NextGenUpdate.
All Rights Reserved.