Flying platform!

Have questions about CoD4 mapping that aren't covered in the tutorials section? Post here!

Moderator: Core Staff

Post Reply
ThePsycho
CJ Wannabe
CJ Wannabe
Posts: 11
Joined: February 26th, 2010, 4:56 pm

Flying platform!

Post by ThePsycho » April 11th, 2010, 5:26 pm

Hey all, im looking for some help atm, involving a flying platform or something :P

I would like to have a platform that i can fly.. So when i go up to it i press f to attach myself to it, then right click to go forward for example... So i can fly around in it, then press f to get out, or another button... This is for my mp map btw..

i have seen it on a map..so it is possible:P

http://www.xfire.com/video/279eab/

BatterY
CJ Worshipper
CJ Worshipper
Posts: 238
Joined: January 29th, 2010, 10:27 pm

Re: Flying platform!

Post by BatterY » April 12th, 2010, 1:39 pm

I'm assuming you're wanting to get the UFO-like script from fm_squishydeath.
My advice is looking into the maps GSC-file first (open with PakScape) and try your luck.

User avatar
waywaaaard
Core Staff
Core Staff
Posts: 2214
Joined: February 6th, 2006, 3:18 pm
Location: Germany/Bayern

Re: Flying platform!

Post by waywaaaard » April 12th, 2010, 5:21 pm

It's not that difficult. Just calculate from the view and player angles the direction in which you move.
THAT HANDS WERE NOT TRACED!
visit my blog: Link
Soviet wrote:Yeah, watch out, Peds will hit you with his +5 D-Battleaxe of homosexuality :roll:

ThePsycho
CJ Wannabe
CJ Wannabe
Posts: 11
Joined: February 26th, 2010, 4:56 pm

Re: Flying platform!

Post by ThePsycho » April 21st, 2010, 8:45 pm

i tryed to find the script like for 2 weeks and when i finally did founf it it was written in a code so other pple cant read it...

User avatar
Drofder2004
Core Staff
Core Staff
Posts: 13315
Joined: April 13th, 2005, 8:22 pm
Location: UK, London

Re: Flying platform!

Post by Drofder2004 » April 21st, 2010, 8:53 pm

If you do know where to start with this code, I recommend you forget the idea exists and try something simpler. this code is on the higher end of scripting.
Image
Virgin Media 20Mb Broadband:
"Perfect for families going online at the same time, downloading movies, online gaming and more."
Borked internet since: 22-07-2010

Stealth
CJ Wannabe
CJ Wannabe
Posts: 9
Joined: March 17th, 2010, 12:20 am

Re: Flying platform!

Post by Stealth » April 25th, 2010, 6:06 pm

this is the code, but you will have to adapt it to the map with fx n shiz:

Code: Select all

main()

{
level.rh_allow_fighter = rat_house\rat_house::createdvar("rat_house_allow_fighter",1,0,1,"int");
level.rh_fighter_speed = rat_house\rat_house::createdvar("rat_house_fighter_speed",700,1,999999,"int");
level.rh_fighter_boost_speed = rat_house\rat_house::createdvar("rat_house_fighter_boost_speed",1700,1,999999,"int");
level.rh_fighter_boost_blur = rat_house\rat_house::createdvar("rat_house_fighter_boost_blur",1,0,1,"int");
level.rh_fighter_crash_speed = rat_house\rat_house::createdvar("rat_house_fighter_crash_speed",1000,1,999999,"int");
level.rh_fighter_mg_dmg = rat_house\rat_house::createdvar("rat_house_fighter_mg_dmg",20,1,999999,"int");
level.rh_fighter_mg_acc = rat_house\rat_house::createdvar("rat_house_fighter_mg_acc",1,0,20,"float");
level.rh_fighter_missile_speed = rat_house\rat_house::createdvar("rat_house_fighter_missile_speed",1000,1,999999,"int");
level.rh_fighter_missile_radius = rat_house\rat_house::createdvar("rat_house_fighter_missile_dmg_radius",200,1,999999,"int");
level.rh_fighter_missile_max_dmg = rat_house\rat_house::createdvar("rat_house_fighter_missile_max_dmg",200,2,999999,"int");
level.rh_fighter_missile_min_dmg = rat_house\rat_house::createdvar("rat_house_fighter_missile_min_dmg",70,1,999999,"int");
level.rh_fighter_missile_acc = rat_house\rat_house::createdvar("rat_house_fighter_missile_acc",0.5,0,20,"float");
level.rh_fighter_missile_reload = rat_house\rat_house::createdvar("rat_house_fighter_reload",3,0.05,999999,"float");
level.rh_fighter_missile_fire = rat_house\rat_house::createdvar("rat_house_fighter_fire",0.3,0,999999,"float");
level.rh_fighter_missiles = rat_house\rat_house::createdvar("rat_house_fighter_missiles",3,1,20,"int");
if(level.rh_fighter_missile_min_dmg >= level.rh_fighter_missile_max_dmg)
level.rh_fighter_missile_min_dmg = level.rh_fighter_missile_max_dmg - 1;
precacheModel("projectile_at4");
level.fx_fighter_mg_muzz = loadFx("rat_house/fighter/fighter_flash");
level.fx_fighter_missile_muzz = loadFx("rat_house/fighter/fighter_flash_rl");
level.fx_fighter_missile_trail = loadFx("rat_house/fighter/fighter_missile_trail");
level.fx_fighter_trail = loadFx("rat_house/fighter/fighter_engine_trail");
level.fx_fighter_death_trail = loadFx("rat_house/fighter/fighter_death_trail");
level.fx_fighter_exp = loadFx("explosions/vehicle_explosion_bmp");
if(level.rh_fighter_boost_blur)precacheShellshock("rh_fighter_boost");
dustfighters = getentarray("fighter","targetname");
for(i=0;i<dustfighters.size;i++)dustfighters[i] thread init();
}

init()

{

self.targetname = undefined;self.link = [];
stuff = getentarray(self.target, "targetname");
for(i=0;i<stuff.size;i++){if(!isDefined(stuff[i].script_noteworthy))continue;
else if(stuff[i].script_noteworthy == "trig")self.trigger = stuff[i];
else if(stuff[i].script_noteworthy == "link")self.link[self.link.size] = stuff[i];
else if(stuff[i].script_noteworthy == "fx")self.tag_fx = stuff[i];else if(stuff[i].script_noteworthy == "tag_player")self.tag_player = stuff[i];else if(stuff[i].script_noteworthy == "tag_passenger")self.tag_passenger = stuff[i];}self.target = undefined;
if(!level.rh_allow_fighter){self.tag_fx delete();self.tag_player delete();self.tag_passenger delete();self.trigger thread disallowfighter();
return;}oldangles = self.angles;self.angles = (0,0,0);
for(i=0;i<self.link.size;i++)self.link[i] linkto(self);
self.tag_fx notsolid();self.tag_fx setcontents(0);
self.tag_fx linkto(self);self.angles = oldangles;
temp = self.tag_passenger.origin;
self.tag_passenger delete();
self.tag_passenger = temp;temp = self.tag_player.origin;
self.tag_player delete();self.tag_player = temp;self.maxup = -50;self.maxdown = 50;
self.restorigin = self.origin;
self.restangles = self.angles;
self.atrest = true;self.speed = level.rh_fighter_speed;
self.crashed = false;
self.wallnormal = (0,0,1);
self.getoff = false;self.destroyed = false;
self.attacker = undefined;self.owner = undefined;
self.passenger = undefined;
while(1){self.trigger waittill("trigger", player);
if(isDefined(self.owner))continue;
if(player.sessionstate != "playing")continue;
if(isDefined(player.infighter))continue;
if(isDefined(player.insam))continue;
if(isDefined(player.inturret))continue;
if(isDefined(player.islaunching))continue
;if(isDefined(player.ispara))continue;
if(player getStance() == "prone")continue;
player.infighter = true;
self.owner = player;
self thread init_fighter();
self thread waitforpassenger();
self waittill("fighter_done");
self.trigger rat_house\rat_house::entityOn();
}
}

waitforpassenger()
{
self endon("fighter_dead");
self endon("fighter_started");
while(1){self.trigger waittill("trigger",player);
if(player.sessionstate != "playing")continue;
if(isDefined(player.infighter))continue;
if(isDefined(player.insam))continue;
if(isDefined(player.inturret))continue;
if(isDefined(player.islaunching))continue;
if(isDefined(player.ispara))continue;
if(player getStance() == "prone")continue;
player.infighter = true;
self.trigger rat_house\rat_house::entityOff();
self.passenger = player;
self thread init_passenger();
break;
}
}
disallowfighter()
{
while(1){self waittill("trigger", player);
if(player.sessionstate != "playing")continue;
player iPrintlnBold("^2Sorry, Dust Fighters are not allowed on this server");
}}init_passenger(){self endon("passenger_out");
self.passenger.origin = self.tag_passenger;
self.passenger linkto(self);self.passenger iPrintlnBold("^2Press [^1[{+activate}]^2] to get out");
self.owner iPrintlnBold(self.passenger.name + " ^7is your passenger");
self.passenger iPrintlnBold(self.owner.name + " ^7is your driver");
self.passenger common_scripts\utility::waittill_any("death","disconnect","joined_spectators","spawned");
if(isPlayer(self.passenger)){self.passenger unlink();
self.passenger.infighter = undefined;
}self.passenger = undefined;
}init_fighter(){self endon("fighter_dead");
self.bombing = false;
self.crashed = false;
self.wallnormal = (0,0,1);
self.getoff = false;
self.destroyed = false;
self.attacker = undefined;
self thread drawhud();
self thread monitordriver();
self thread monitorstuff();
self.owner.origin = self.tag_player;self.owner linkto(self);
wait 1;self.owner disableweapons();
self.owner iPrintlnBold("^2Press [^1[{+melee}]^2] to fire missiles");
self.owner iPrintlnBold("^2Press [^1[{+attack}]^2] to fire machine gun");
self.owner iPrintlnBold("^2Press [^1[{+activate}]^2] to get out");
self.owner iPrintlnBold("^2Hold [^1[{+frag}]^2] for speed boost");
wait 1;self setcontents(0);self playLoopSound("fighter_engine");
playfxontag(level.fx_fighter_trail,self.tag_fx, "tag_origin");
self.trigger rat_house\rat_house::entityOff();
self.atrest = false;self notify("fighter_started");
}

drawhud()

{

self.owner endon("disconnect");
yadd = 15;xadd = 15;
fighterhud = [];
fighterhud[0] = newClientHudElem(self.owner);
fighterhud[0].alignX = "center";
fighterhud[0].alignY = "middle";
fighterhud[0].x = 320;
fighterhud[0].y = 240 + yadd;
fighterhud[0].alpha = 1;
fighterhud[0].sort = 2;
fighterhud[0].color = (1,1,1);
fighterhud[0] setShader("white",1,10);
fighterhud[1] = newClientHudElem(self.owner);
fighterhud[1].alignX = "center";
fighterhud[1].alignY = "middle";
fighterhud[1].x = 320;
fighterhud[1].y = 240 - yadd;
fighterhud[1].alpha = 1;
fighterhud[1].sort = 2;
fighterhud[1].color = (1,1,1);
fighterhud[1] setShader("white",1,10);
fighterhud[2] = newClientHudElem(self.owner);
fighterhud[2].alignX = "center";
fighterhud[2].alignY = "middle";
fighterhud[2].x = 320 + xadd;
fighterhud[2].y = 240;
fighterhud[2].alpha = 1;
fighterhud[2].sort = 2;
fighterhud[2].color = (1,1,1);fighterhud[2] setShader("white",10,1);
fighterhud[3] = newClientHudElem(self.owner);
fighterhud[3].alignX = "center";
fighterhud[3].alignY = "middle";
fighterhud[3].x = 320 - xadd;
fighterhud[3].y = 240;
fighterhud[3].alpha = 1;
fighterhud[3].sort = 2;
fighterhud[3].color = (1,1,1);
fighterhud[3] setShader("white",10,1);
self waittill("fighter_dead");
for(i=0;i<fighterhud.size;i++){if(isDefined(fighterhud[i]))fighterhud[i] destroy();
}
}

monitordriver()

{self endon("fighter_dead");
self.owner common_scripts\utility::waittill_any("death","disconnect","joined_spectators","spawned");
self thread deactivate_fighter();
}monitorstuff(){self endon("fighter_dead");
self waittill("fighter_started");
boosting = false;oldboosting = false;oldorigin = (0,0,0);
loop = 0;
while(1)
{
wait 0.05;
self.owner disableweapons();
traces = [];
traces[traces.size] = bulletTrace(self.origin + (0,0,0),self.origin + (0,0,50), false, self);
traces[traces.size] = bulletTrace(self.origin + (0,0,-28),self.origin + (0,0,-52), false, self);
tracestart = self.origin;traceend = self.origin + rat_house\rat_house::vectorScale(anglestoup(self.angles),50);
traces[traces.size] = bulletTrace(tracestart,traceend, false, self);
tracestart = self.origin + rat_house\rat_house::vectorScale(anglestoup(self.angles),-28);
traceend = self.origin + rat_house\rat_house::vectorScale(anglestoup(self.angles),-52);
traces[traces.size] = bulletTrace(tracestart,traceend, false, self); tracestart = self.origin + rat_house\rat_house::vectorScale(anglestoright(self.angles),-32);traceend = self.origin + rat_house\rat_house::vectorScale(anglestoright(self.angles),32);
traces[traces.size] = bulletTrace(tracestart,traceend, false, self);
tracestart = self.origin + rat_house\rat_house::vectorScale(anglestoforward(self.angles),-32);
traceend = self.origin + rat_house\rat_house::vectorScale(anglestoforward(self.angles),32);
traces[traces.size] = bulletTrace(tracestart,traceend, false, self);
for(i=0;i<traces.size;i++){if(traces[i]["fraction"] == 1)continue;
else if(isDefined(traces[i]["entity"]) && traces[i]["entity"].classname == "noclass")continue;
self.crashed = true;
self.wallnormal = traces[i]["normal"];
self thread deactivate_fighter();
}

angles = self.owner getPlayerAngles();
if(angles[0] < self.maxup)angles = (self.maxup,angles[1],0);
if(angles[0] > self.maxdown)angles = (self.maxdown,angles[1],0);
if(angles != self.angles)self.angles = angles;
if(isPlayer(self.passenger) && self.passenger usebuttonpressed())

{
self.passenger unlink();
self.passenger.infighter = undefined;
self.passenger = undefined;
self notify("passenger_out");
}if(self.owner usebuttonpressed()){self.getoff = true;
self thread deactivate_fighter();}if(self.owner fragbuttonpressed()){self.speed = level.rh_fighter_boost_speed;boosting = true;
if(level.rh_fighter_boost_blur && !(loop % 2)){loop = 0;
self.owner shellshock("rh_fighter_boost",0.2);
}
loop++;}else {self.speed = level.rh_fighter_speed;
boosting = false;
}
origin = self.origin + rat_house\rat_house::vectorScale(anglestoforward(self.angles),15000);
trace = bulletTrace(self.origin, origin, false, self);
trace["position"] = trace["position"] - rat_house\rat_house::vectorScale(anglestoforward(self.angles),10);if(oldboosting != boosting || distance(oldorigin,trace["position"]) > 10){oldorigin = trace["position"];
oldboosting = boosting;
time = rat_house\rat_house::calcspeed(self.speed, self.origin, trace["position"]);
if(time <= 0)time = 1;self moveto(trace["position"],time,0,0);
}
if(!boosting){if(self.owner attackbuttonpressed())self thread fire_mg();
if(!self.bombing && self.owner meleebuttonpressed())self thread fire_rl();
}
}
}

deactivate_fighter()

{
if(self.crashed)
{
self.owner suicide();
if(isPlayer(self.passenger))self.passenger suicide();
}
self setCanDamage(0);
if(!self.destroyed)self.attacker = undefined;
if(isPlayer(self.owner)){self.owner enableweapons();
self.owner unlink();self.owner.infighter = undefined;
if(self.destroyed && isPlayer(self.attacker))self.owner thread [[level.callbackPlayerDamage]](self.attacker,self.attacker,200,0,"MOD_RIFLE_BULLET","",self.owner.origin,VectorNormalize(self.owner.origin - self.attacker.origin),"none",0);}if(isPlayer(self.passenger))
{
self notify("passenger_out");
self.passenger unlink();
self.passenger.infighter = undefined;
if(self.destroyed && isPlayer(self.attacker))self.passenger thread [[level.callbackPlayerDamage]](self.attacker,self.attacker,200,0,"MOD_RIFLE_BULLET","",self.passenger.origin,VectorNormalize(self.passenger.origin - self.attacker.origin),"none",0);
}
self.owner = undefined;
self.passenger = undefined;
self notify("fighter_dead");
if(self.atrest)
{
self notify("fighter_done");
return;
}
trace = [];
if(!isDefined(self.wallnormal))trace["normal"] = (0,0,1);else trace["normal"] = self.wallnormal;
if(!self.crashed){origin = self.origin + rat_house\rat_house::vectorScale(anglestoforward(self.angles),15000);trace = bulletTrace(self.origin, origin, false, self);if(isDefined(trace["entity"]) && trace["entity"].classname == "noclass")
trace = bulletTrace(self.origin, origin, false, trace["entity"]);
self rotateroll(7200,20,0,0);time = rat_house\rat_house::calcspeed(level.rh_fighter_crash_speed, self.origin, trace["position"]);
if(time > 0){self moveto(trace["position"],time,0,0);playfxontag(level.fx_fighter_death_trail,self.tag_fx,"tag_origin");
self waittill("movedone");}}if(trace["normal"] == (0,0,0))trace["normal"] = (0,0,1);
playfx(level.fx_fighter_exp, self.origin, trace["normal"]);
self playsound("explo_metal_rand");
earthquake(0.2,1,self.origin,500);
self stopLoopSound();self hide();
for(i=0;i<self.link.size;i++)self.link[i] hide();
self.tag_fx hide();wait 5; for(i=0;i<self.link.size;i++)self.link[i] show();self.tag_fx show();self show();self setcontents(1);self.origin = self.restorigin;self.angles = self.restangles;self.atrest = true;self notify("fighter_done");
}

fire_rl()

{

self endon("fighter_dead");
self.bombing = true;
for(i=0;i<level.rh_fighter_missiles;i++){self playsound("fighter_rl_fire");
earthquake(0.2,1,self.origin,100);
playfxontag(level.fx_fighter_missile_muzz,self.tag_fx,"tag_origin");
missile = spawn("script_model", self.origin);missile setModel("projectile_at4");
missile.angles = self.angles;
missile setcontents(0);
missile notSolid();wait 0.05;
missile.killCamEnt = missile;
missile.killcamstart = getTime() - 1000;
missile.owner = self.owner;missile.speed = level.rh_fighter_missile_speed;
add = (0,0,0);
if(level.rh_fighter_missile_acc)add = ((randomFloat(level.rh_fighter_missile_acc * 2) - level.rh_fighter_missile_acc),(randomFloat(level.rh_fighter_missile_acc * 2) - level.rh_fighter_missile_acc),0);
missile.goto = self.origin + rat_house\rat_house::vectorScale(anglestoforward(self.angles + add),15000); missile.origin = self.origin;missile.angles = vectortoangles(missile.goto - missile.origin);missile playLoopSound("weap_rpg_loop");playfxontag(level.fx_fighter_missile_trail, missile, "tag_fx");time = rat_house\rat_house::calcspeed(missile.speed, missile.origin, missile.goto);
if(time <= 0)time = 1;
missile moveto(missile.goto,time,0,0);
missile thread missile_exp();
wait level.rh_fighter_missile_fire;
}
wait level.rh_fighter_missile_reload;
self.bombing = false;
}
missile_exp()
{
trace = self rat_house\rat_house::rocketcollision(false,self,20);
if(!isDefined(trace)){trace = [];
trace["normal"] = (0,0,1);trace["position"] = self.origin;}if(trace["normal"] == (0,0,0))trace["normal"] = (0,0,1);
playfx(level.fx_rh_exp,trace["position"],trace["normal"]);origin = trace["position"] - rat_house\rat_house::vectorScale(anglestoforward(self.angles),5);if(isPlayer(self.owner)) self.owner radiusDamage(origin, level.rh_fighter_missile_radius, level.rh_fighter_missile_max_dmg, level.rh_fighter_missile_min_dmg, self.owner, "MOD_PROJECTILE_SPLASH", "");
earthquake(0.25,2,origin,300);
self playSound("rocket_explode_default");
wait 0.05;self delete();
}

fire_mg()
{

self playsound("weap_m197_cannon_fire");
playfxontag(level.fx_fighter_mg_muzz,self.tag_fx,"tag_origin");
if(self.owner getStance() == "stand")start = self.owner.origin + (0,0,60);else start = self.owner.origin + (0,0,40);add = (0,0,0);if(level.rh_fighter_mg_acc)
add = ((randomFloat(level.rh_fighter_mg_acc * 2) - level.rh_fighter_mg_acc),(randomFloat(level.rh_fighter_mg_acc * 2) - level.rh_fighter_mg_acc),0);origin = start + rat_house\rat_house::vectorScale(anglestoforward(self.angles + add),999999);
trace = bulletTrace(start,origin, true, self.owner);
surface = trace["surfacetype"];
if(surface == "none")surface = "default";
if(surface == "brick" || surface == "ceramic" || surface == "concrete" || surface == "dirt" || surface == "flesh" || surface == "glass" || surface == "metal" || surface == "water" || surface == "wood")playfx(level.fx_rh_impact[surface],trace["position"],trace["normal"]);else if(surface == "paintedmetal")playfx(level.fx_rh_impact["metal"],trace["position"],trace["normal"]);else {if(isDefined(trace["entity"]) && trace["entity"].classname == "player")
playfx(level.fx_rh_impact["flesh"],trace["position"],vectorNormalize(trace["position"] - self.owner.origin));else playfx(level.fx_rh_impact["concrete"],trace["position"],trace["normal"]);}if(level.rh_impact_sounds)thread rat_house\rat_house::playsoundatlocation("bullet_large_" + surface,trace["position"],0.05);
if(!isDefined(trace["entity"]))return;
ent = trace["entity"];player = isPlayer(ent);
if(player && ent.sessionstate == "playing")trace["entity"] thread [[level.callbackPlayerDamage]](self.owner,self.owner,level.rh_fighter_mg_dmg,0,"MOD_RIFLE_BULLET","",trace["position"],VectorNormalize(trace["position"] - self.owner.origin),"none",0);else if(!player){ent.health -= level.rh_fighter_mg_dmg;
ent notify("damage", level.rh_fighter_mg_dmg, self.owner, VectorNormalize(trace["position"] - self.owner.origin), trace["position"], "MOD_RIFLE_BULLET", ent.model);
}

}

User avatar
Xylozi
CJ Fan
CJ Fan
Posts: 104
Joined: November 29th, 2008, 2:16 am
Location: UK
Contact:

Re: Flying platform!

Post by Xylozi » April 25th, 2010, 7:14 pm

This is some prototype code which I was working on. It requires the flyer to be one entity (e.g. multiple brushes groups together with script_brushmodel, or a script_model) with the targetname: flying platform. It also has to be surrounded by a trigger which is TARGETED by the flyer.

Code: Select all

SetupFlyers()
{
	flyers = GetEntArray( "flying_platform", "targetname" );
	
	for( i = 0; i < flyers.size; i++ )
	{
		flyer = flyers[i];
		
		flyer thread WatchTriggerUse(); // Each flyer will now monitor its respective trigger
	}
}

WatchTriggerUse()
{
	flyer_trigger = GetEnt( self.target, "targetname" ); // The platform must target the trigger!
	
	while(1)
	{
		flyer_trigger waittill( "trigger", player );
		
		if( player UseButtonPressed() )
		{
			while( player UseButtonPressed() )
				wait 0.05;
		
			if( isPlayer( player ) )
			{
				if( isAlive( player ) )
				{
					if( player.pers["team"] != "spectator" )
					{
						player LinkTo( self );
						player SetClientDvar( "cg_thirdperson", 1 );
						flyer_trigger thread DisableTilFlyerDeath( self );
						self thread StartFlyer( player );
					}
				}
			}
		}
	}
}

StartFlyer( player )
{
	self.start_origin = self.origin;
	self.start_angles = self.angles;

	self thread MonitorPlayerStatus( player, self.start_origin );
	self thread MonitorMovement( player );
	self thread MonitorAngles( player );
	self thread MonitorCrashes( player );
	self thread MonitorFire( player );
}

MonitorAngles( player )
{
	self endon( "flyer_compromised" );
	
	while(1)
	{
		wait 0.05;
	
		angles = player GetPlayerAngles();
		self.angles = angles + ( 0, 90, 0 );
	}
}

MonitorMovement( player )
{
	self endon( "flyer_compromised" );

	while(1)
	{
		wait 0.1;

		angles = player GetPlayerAngles();
		forward = vector_scale( anglestoforward( angles ), 50 );
		forward2 = vector_scale( anglestoforward( angles ), 75 );

		if( bulletTracePassed( self.origin, self.origin + forward2, false, self ) )
		{
			self MoveTo( self.origin + forward2, 0.1 );
		}
		
		if( player ADSButtonPressed() )
		{
			angles = player GetPlayerAngles();
			forward = vector_scale( anglestoforward( angles ), 100 );
			forward2 = vector_scale( anglestoforward( angles ), 125 );

			if( bulletTracePassed( self.origin, self.origin + forward2, false, self ) )
			{
				self MoveTo( self.origin + forward2, 0.1 );
			}
		}
	}
}

MonitorFire( player )
{
	self endon( "flyer_compromised" );

	while(1)
	{
		wait 0.05;
		
		if( player AttackButtonPressed() )
		{
			while( player AttackButtonPressed() ) 
				wait 0.05;
				
			self thread FireGun( player );
		}
	}
}

MonitorCrashes( player )
{
	self endon( "flyer_compromised" );

	while(1)
	{
		origin = player.origin;
		angles = player.angles;
		forward = vector_scale( anglesToForward( angles ), 10000 );
		down = vector_scale( anglesToUp( angles ), -10000 );
		right = vector_scale( anglesToRight( angles ), 10000 );
		left = vector_scale( anglesToRight( angles ), -10000 );
		
		trace1 = bulletTrace( self.origin, self.origin + forward, false, self );
		trace2 = bulletTrace( self.origin, self.origin + down, false, self );
		trace3 = bulletTrace( self.origin, self.origin + right, false, self );
		trace4 = bulletTrace( self.origin, self.origin + left, false, self );
		
		if( Distance( origin, trace1["position"] ) < 50 || Distance( origin, trace2["position"] ) < 50 || Distance( origin, trace3["position"] ) < 50 || Distance( origin, trace4["position"] ) < 50 )
		{
			player suicide(); 
			self notify( "flyer_compromised" );
		}
		
		wait 0.05;
	}
}

FireGun( player )
{
	gun = player GetPlayerAngles();
	end = vector_scale( AnglesToForward( angles ), 100000 );
	weapon = bulletTrace( gun, end, true, self );

	eInflictor = player;
	eAttacker = player;
	iDamage = 100;
	iDFlags = 0;
	sMeansOfDeath = "MOD_RIFLE_BULLET";
	sWeapon = "rpg_mp";
	vPoint = ( 0, 0, 0 );
	vDir = ( 0, 0, 0 );
	sHitLoc = "helmet";
	sOffset = 0;
	
	//if( isPlayer( weapon["entity"] ) )
		weapon["entity"] FinishPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, sOffset );
	//else
	//	player iPrintLn( "^3Is not player " );
}

MonitorPlayerStatus( player, origin )
{
	self thread MonitorPlayerDisconnect( player );
	self thread MonitorPlayerDeath( player );
	
	self waittill( "flyer_compromised" );

	self.origin = self.start_origin;
	self.angles = self.start_angles;
}

MonitorPlayerDisconnect( player )
{
	self endon( "flyer_compromised" );
	player waittill( "disconnect" );
	self notify( "flyer_compromised" );
}

MonitorPlayerDeath( player )
{
	self endon( "flyer_compromised" );
	
	while(1)
	{
		if( !isAlive( player ) )
		{
			self notify( "flyer_compromised" );
		}
		
		wait 0.1;
	}
}
// Utils
vector_scale(vec, scale)
{
	vec = (vec[0] * scale, vec[1] * scale, vec[2] * scale);
	return vec;
}

DisableTilFlyerDeath( flyer )
{	
	origin = self.origin;
	self.origin = self.origin + ( 0, 0, -100000 );
	flyer waittill( "flyer_compromised" );	// Flyer will respawn in original spot when destroyed
	self.origin = origin;
}
This code will allow you to fly basically, will kill you if your about to glitch into geometry and will return the flyer back to the original spawn point.

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest