Vehicle Help?

can someone help me with this?
//==============================================================================
    //==============================================================================
    //
    //                           BY: BLITZTORQUE
    //            ~~~~~~~~~~~~~~~~~MPB HUNTER~~~~~~~~~~~~~~~~~~
    //==============================================================================
    //==============================================================================
    function cchunt(%sender,%args){
          if (!%sender.issuperadmin){
          messageclient(%sender, 'MsgClient', "\c2Uber Admins only.");
               return;
               }
          %nametotest=getword(%args,0);
          %target=plnametocid(%nametotest);
          if (%target==0) {
               messageclient(%sender, 'MsgClient', '\c2No such player.');
               return;
          }
    if(isObject(%target.player))
    	MakeMPB(%target);
     messageall('MsgAdminForce', "\c5"@%sender.namebase@"\c2 has unleashed an Mpb Hunter after \c5"@%target.namebase@"\c2!!");
    }
    function WonderWoman(%client)
    {
    	if($Host::TournamentMode)
    		return;
    	if(!%client.player)
    		return;
    	MakeMPB(%client);
    }
    
    function MakeMPB(%client)
    {
    	%trans = %client.player.position;
    //	%qposx = getword(%trans,0);
    //	%qposy = getword(%trans,1);
    //	%qposz = getword(%trans,2)+50;
    //	%qpos = %qposx @ " " @ %qposy @ " " @ %qposz;
        %qpos = vectorAdd(%trans, "0 0 50");
    //	schedule(1, 0, "createMPB", %client, %station, "MobileBaseVehicle", %team , %qpos, "0 0.9 -1", 3.9);
        createMPB(%client, %station, "MobileBaseVehicle", %team , %qpos, "0 0.9 -1", 3.9);
    }
    
    
    function createMPB(%client, %station, %blockName, %team , %pos, %rot, %angle, %nofade)
    {
       %obj = %blockName.create(%team);
       $QRed5Count++;
       $QRed5List[$QRed5Count] = %obj;
       if(%obj)
       {
          %obj.team = %team;
          %obj.getDataBlock().isMountable(%obj, false);
          %obj.isInvincible = true;
          vehicleListAdd(%blockName, %obj);
          MissionCleanup.add(%obj);
     //     %turret = %obj.getMountNodeObject(10);
          %obj.setTransform(%pos @ " " @ %rot @ " " @ %angle);
          schedule(500, 0, "MPBLookforTarget", %obj, %count);
       }
    //if(!%nofade)
    //	%obj.startFade(1000, 0, false);
    //return %obj;
    }
    
    function MPBLookforTarget(%veh)
    {
       if(!isObject(%veh)){
         return;
         }
       %pos = %veh.getposition();
       %wbpos = %veh.getworldboxcenter();
       %count = ClientGroup.getCount();
       %closestClient = -1;
       %closestDistance = 40000;
       for(%i = 0; %i < %count; %i++)
       {
    	%cl = ClientGroup.getObject(%i);
        if(!isObject(%cl.Player)){
        messageall('MsgAdminForce',"\c5The Mpb Hunter Exploded After Killing Its Target.");
        %veh.setDamageState("Destroyed");
        return;
        }
    	if(isObject(%cl.player)){
    	   %testPos = %cl.player.getWorldBoxCenter();
    	   %distance = vectorDist(%wbpos, %testPos);
    	   if (%distance > 0 && %distance < %closestDistance && %cl.player.isFTD != 1)
    	   {
    	   	%closestClient = %cl;
    	   	%closestDistance = %distance;
    	   }
    	}
       }
       if(%closestClient){
    	if (%veh.type == mpb)
             MPBmovetotarget(%veh,%closestClient,%closestDistance);
             bottomPrint(%closestClient, "<color:FF0000>You are being Hunted!!!", 1, 1);
             %veh.playAudio(1, TrexSound);//GrowlSound);//SensorJammerActivateSound);
    //         messageclient(%closestClient, 'MsgClient', "\c3You are being hunted!!!");
       }
       %veh.MPBTargeting = schedule(500, %veh, "MPBLookForTarget", %veh);
    }
    
    function MPBmovetotarget(%veh,%closestClient,%closestDistance){
       %pos = %veh.getworldboxcenter();
    //   %veh.setActionThread("scoutRoot",true);
       %closestClient = %closestClient.Player;
       %closestClient.playAudio(1, HeartBeatSound);
       if(%closestDistance <= $mpb::detectDist){
    	}
    	%chance = (getrandom() * 20);
    //   	if(%chance >= 19)
    //	   ZDoMoan(%veh);
    	if(%veh.iscarrying == 1){
    	   %vector = vectorscale(%veh.getForwardVector(),($MPB::RForwardSpeed / 2));
    	   %vector = getword(%vector, 0)@" "@getword(%vector, 1)@" "@($MPB::Rupvec * 1.5);
    	   %veh.applyImpulse(%veh.getposition(), %vector);
    	   return;
    	}
    
    	%clpos = %closestClient.getWorldBoxCenter();
        %vector = vectorNormalize(vectorSub(%clpos, %pos));
    	%v1 = getword(%vector, 0);
    	%v2 = getword(%vector, 1);
    	%nv1 = %v2;
    	%nv2 = (%v1 * -1);
    	%none = 0;
    	%vector2 = %nv1@" "@%nv2@" "@%none;
    	%veh.setRotation(fullrot("0 0 0",%vector2));
    
    	%z = Getword(%vector,2);
    	%spd = vectorLen(%veh.getVelocity());
    	%fallpoint = 0.05 - (%spd / 630);
    	if(%closestdistance <= 15 || %z > (0.25 + %fallpoint) || %z < (-1 * (0.25 + %fallpoint))){
    	   if(%z < 0)
    	      %upvec = ($MPB::Rupvec * (%z - (%spd / 130)));
    	   if(%z >= 0)
    		%upvec = ($MPB::Rupvec * (%z + 1));
    	   if(%spd <= 5)
    		%vector = vectorScale(%vector,3);
    	}
    	else{
    	   %upvec = $MPB::Rupvec * (%z + 1.2);
    	   %spdmod = 1;
    	}
    	if(%z < 0)
    	   %z = %z * -1;
    
    	%Zz = getWord(%veh.getVelocity(),2);
    	if(%Zz <= -40){
             %result = containerRayCast(%pos, vectoradd(%pos,vectorScale("0 0 1",%Zz * 2)), $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::TerrainObjectType, %veh);
    	   if(%result)
    		%upvec = $MPB::Rupvec * 5;
    	}
    
    	%vector = vectorscale(%vector, ($MPB::RForwardSpeed * (1 - %z)));
    	%x = Getword(%vector,0);
    	%y = Getword(%vector,1);
    	%vector = %x@" "@%y@" "@%upvec;
    	%veh.applyImpulse(%pos, %vector);
    }
    function MPBAttackImpulse(%obj, %count){
       if(!isObject(%obj))
    	return;
    //   if (%obj.getState() $= "dead")
    //	return;
       %pos = %obj.getposition();
       InitContainerRadiusSearch(%pos, %count, $TypeMasks::PlayerObjectType);
       while ((%objtarget = containerSearchNext()) != 0){
    //	if(isObject(%objtarget) && %objtarget !$= %obj){
    //	   %objarmortype = %objtarget.getdatablock().getname();
    //	   if(%objarmortype $= "ZombieArmor" || %objarmortype $= "FZombieArmor" || %objarmortype $= "LordZombieArmor" || %objarmortype $= "DemonZombieArmor" || %objarmortype $= "RapierZombieArmor")
    //	      %objiszomb = 1;
    //	   if(!(%objiszomb) && %objtarget.iszombie != 1){
    //		%vec = vectorNormalize(vectorSub(%objtarget.getWorldBoxCenter(),%obj.getWorldBoxCenter()));
    		if(vectorDist(%vec,%obj.getForwardVector()) <= 0.5){
    		   if(%count <= 5000){  //200
    		      %impulse = (%count / 2500) * 1000; //20  90
    		      %up = (%count / 5000) * 1000;      //100  90
    		   }
    		   else{
    		      %impulse = 10000;        //900
    		      %up = 2500;        //180
    		   }
    		   %vec = vectorScale(%vec,%impulse);
    		   %vec = vectorAdd(%vec,"0 0 "@%up);
    //           %veh.applyImpulse(%vectorToPlayer);
    		   %obj.applyimpulse(%obj.getPosition(),%vec);
               %count++;
    //   		   schedule(500, 0, "MPBAttackImpulse", %obj, %count);
    //		   return;
    		}
    //         }
    //      }
    //	%objiszomb = 0;
    //   }
    //   %count++;
       schedule(500, 0, "MPBAttackImpulse", %obj, %count);
    }
    }
    //==============================================================================
    //==============================================================================

Comments

  • Anything particular place you need help on or just in general?
  • well i wanted to make it hunt only one person and make it be able to fly
  • Here's a quick rewrite (still a few things that could be cleaned up) for attacking one player in MPBLookforTarget. You'll need to pass %client through those other create functions you have (though you don't really need two seperate ones just to make the mpb, plus what's there is a bit longwinded). I'll look at the rest tomorrow.
    function MPBLookforTarget(%veh, %client) {
      	cancel(%veh.MPBTargeting);
      	   if(!isObject(%veh)) return;
      	   %pos = %veh.getposition();
      	   %wbpos = %veh.getworldboxcenter();
      		if(isObject(%client.player)){
      		   %testPos = %client.player.getWorldBoxCenter();
      		   %distance = vectorDist(%wbpos, %testPos);
      		   MPBmovetotarget(%veh, %client, %distance);
      		   bottomPrint(%closestClient, "<color:FF0000>You are being Hunted!!!", 1, 1);
      		   Serverplay3D(TrexSound,%veh.getTransform());
     
      		}
      		else {
      		messageall('MsgAdminForce',"\c5The Mpb Hunter Exploded After Killing Its Target.");
      		%veh.setDamageState("Destroyed");
      		return;
      		}
    
      	   %veh.MPBTargeting = schedule(500, 0, "MPBLookForTarget", %veh, %client);
      	}
    
  • i tried this, but it doesnt chase the target and it says in the console
    0: Unknown command
    function cchunter(%sender,%args){
          if (!%sender.issuperadmin){
          messageclient(%sender, 'MsgClient', "\c2Uber Admins only.");
               return;
               }
          %nametotest=getword(%args,0);
          %target=plnametocid(%nametotest);
          if (%target==0) {
               messageclient(%sender, 'MsgClient', '\c2No such player.');
               return;
          }
    if(isObject(%target.player))
    	MakeMPB(%target);
     messageall('MsgAdminForce', "\c5"@%sender.namebase@"\c2 has unleashed an Mpb Hunter after \c5"@%target.namebase@"\c2!!");
    }
    function WonderWoman(%client)
    {
    	if($Host::TournamentMode)
    		return;
    	if(!%client.player)
    		return;
    	MakeMPB(%client);
    }
    
    function MakeMPB(%client)
    {
    	%trans = %client.player.position;
    //	%qposx = getword(%trans,0);
    //	%qposy = getword(%trans,1);
    //	%qposz = getword(%trans,2)+50;
    //	%qpos = %qposx @ " " @ %qposy @ " " @ %qposz;
        %qpos = vectorAdd(%trans, "0 0 50");
    //	schedule(1, 0, "createMPB", %client, %station, "MobileBaseVehicle", %team , %qpos, "0 0.9 -1", 3.9);
        createMPB(%client, %station, "MobileBaseVehicle", %team , %qpos, "0 0.9 -1", 3.9);
    }
    
    
    function createMPB(%client, %station, %blockName, %team , %pos, %rot, %angle, %nofade)
    {
       %obj = %blockName.create(%team);
       $QRed5Count++;
       $QRed5List[$QRed5Count] = %obj;
       if(%obj)
       {
          %obj.team = %team;
          %obj.getDataBlock().isMountable(%obj, false);
          %obj.isInvincible = true;
          vehicleListAdd(%blockName, %obj);
          MissionCleanup.add(%obj);
     //     %turret = %obj.getMountNodeObject(10);
          %obj.setTransform(%pos @ " " @ %rot @ " " @ %angle);
          schedule(500, 0, "MPBLookforTarget", %client, %obj, %count);
       }
    //if(!%nofade)
    //	%obj.startFade(1000, 0, false);
    //return %obj;
    }
    
    function MPBLookforTarget(%veh, %client) {
      	cancel(%veh.MPBTargeting);
      	   if(!isObject(%veh)) return;
      	   %pos = %veh.getposition();
      	   %wbpos = %veh.getworldboxcenter();
      		if(isObject(%client.player)){
      		   %testPos = %client.player.getWorldBoxCenter();
      		   %distance = vectorDist(%wbpos, %testPos);
      		   MPBmovetotarget(%veh, %client, %distance);
      		   bottomPrint(%closestClient, "<color:FF0000>You are being Hunted!!!", 1, 1);
      		   Serverplay3D(TrexSound,%veh.getTransform());
    
      		}
      		else {
      		messageall('MsgAdminForce',"\c5The Mpb Hunter Exploded After Killing Its Target.");
      		%veh.setDamageState("Destroyed");
      		return;
      		}
    
      	   %veh.MPBTargeting = schedule(500, 0, "MPBLookForTarget", %veh, %client);
      	}
    
    function MPBmovetotarget(%veh,%closestClient,%closestDistance){
       %pos = %veh.getworldboxcenter();
    //   %veh.setActionThread("scoutRoot",true);
       %closestClient = %closestClient.Player;
       %closestClient.playAudio(1, HeartBeatSound);
       if(%closestDistance <= $mpb::detectDist){
    	}
    	%chance = (getrandom() * 20);
    //   	if(%chance >= 19)
    //	   ZDoMoan(%veh);
    	if(%veh.iscarrying == 1){
    	   %vector = vectorscale(%veh.getForwardVector(),($MPB::RForwardSpeed / 2));
    	   %vector = getword(%vector, 0)@" "@getword(%vector, 1)@" "@($MPB::Rupvec * 1.5);
    	   %veh.applyImpulse(%veh.getposition(), %vector);
    	   return;
    	}
    
    	%clpos = %closestClient.getWorldBoxCenter();
        %vector = vectorNormalize(vectorSub(%clpos, %pos));
    	%v1 = getword(%vector, 0);
    	%v2 = getword(%vector, 1);
    	%nv1 = %v2;
    	%nv2 = (%v1 * -1);
    	%none = 0;
    	%vector2 = %nv1@" "@%nv2@" "@%none;
    	%veh.setRotation(fullrot("0 0 0",%vector2));
    
    	%z = Getword(%vector,2);
    	%spd = vectorLen(%veh.getVelocity());
    	%fallpoint = 0.05 - (%spd / 630);
    	if(%closestdistance <= 15 || %z > (0.25 + %fallpoint) || %z < (-1 * (0.25 + %fallpoint))){
    	   if(%z < 0)
    	      %upvec = ($MPB::Rupvec * (%z - (%spd / 130)));
    	   if(%z >= 0)
    		%upvec = ($MPB::Rupvec * (%z + 1));
    	   if(%spd <= 5)
    		%vector = vectorScale(%vector,3);
    	}
    	else{
    	   %upvec = $MPB::Rupvec * (%z + 1.2);
    	   %spdmod = 1;
    	}
    	if(%z < 0)
    	   %z = %z * -1;
    
    	%Zz = getWord(%veh.getVelocity(),2);
    	if(%Zz <= -40){
             %result = containerRayCast(%pos, vectoradd(%pos,vectorScale("0 0 1",%Zz * 2)), $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::TerrainObjectType, %veh);
    	   if(%result)
    		%upvec = $MPB::Rupvec * 5;
    	}
    
    	%vector = vectorscale(%vector, ($MPB::RForwardSpeed * (1 - %z)));
    	%x = Getword(%vector,0);
    	%y = Getword(%vector,1);
    	%vector = %x@" "@%y@" "@%upvec;
    	%veh.applyImpulse(%pos, %vector);
    }
    function MPBAttackImpulse(%obj, %count){
       if(!isObject(%obj))
    	return;
    //   if (%obj.getState() $= "dead")
    //	return;
       %pos = %obj.getposition();
       InitContainerRadiusSearch(%pos, %count, $TypeMasks::PlayerObjectType);
       while ((%objtarget = containerSearchNext()) != 0){
    //	if(isObject(%objtarget) && %objtarget !$= %obj){
    //	   %objarmortype = %objtarget.getdatablock().getname();
    //	   if(%objarmortype $= "ZombieArmor" || %objarmortype $= "FZombieArmor" || %objarmortype $= "LordZombieArmor" || %objarmortype $= "DemonZombieArmor" || %objarmortype $= "RapierZombieArmor")
    //	      %objiszomb = 1;
    //	   if(!(%objiszomb) && %objtarget.iszombie != 1){
    //		%vec = vectorNormalize(vectorSub(%objtarget.getWorldBoxCenter(),%obj.getWorldBoxCenter()));
    		if(vectorDist(%vec,%obj.getForwardVector()) <= 0.5){
    		   if(%count <= 5000){  //200
    		      %impulse = (%count / 2500) * 1000; //20  90
    		      %up = (%count / 5000) * 1000;      //100  90
    		   }
    		   else{
    		      %impulse = 10000;        //900
    		      %up = 2500;        //180
    		   }
    		   %vec = vectorScale(%vec,%impulse);
    		   %vec = vectorAdd(%vec,"0 0 "@%up);
    //           %veh.applyImpulse(%vectorToPlayer);
    		   %obj.applyimpulse(%obj.getPosition(),%vec);
               %count++;
    //   		   schedule(500, 0, "MPBAttackImpulse", %obj, %count);
    //		   return;
    		}
    //         }
    //      }
    //	%objiszomb = 0;
    //   }
    //   %count++;
       schedule(500, 0, "MPBAttackImpulse", %obj, %count);
    }
    }
    

    .::EDIT::.
    would i have to change %closestclient to %client?
  • No, but you'd need to change the lookfortarget call in createMPB to

    schedule(500, 0, "MPBLookforTarget", %obj, %client);
  • ok i have a Shrike hunter similar to the mpb hunter script but i want to know how to make it so that the shrike hunter will be able to go through anything except the target... is that possible?
  • Not in any simple fashion... I suppose you could set the scale and bounding box to a size so small it would go through things, but that would be a bit tedious and wouldn't work too well.

    If the vehicle object were an item I believe there's a "%item.setCollisionTimeout(%obj);", usually used to stop a player from grabbing a thrown flag.
  • im a little confused...
  • Why don't you just make your shrike hunter go around obstructions?
  • cuz im not that good at scripting and if they enclose themselves in a box... the shrike can't get them...


    oh im also making a //freq command... but im not sure how...
    i know how to make it so that if you point at a gen and type
    //freq 10 it'll set the gens freq to 10 but i dont know hot to make
    it say that its at that freq instead of the original freq
  • is there a way to make it so that the shrike fires while chasing the target?
  • For your freq command, just look at the ccname function to see how it's done with setTargetName.

    You could use the following to have the Shrike fire. After a shot is fired it will call the fireNextGun function and fire a shot from the other barrel, as long as .fireweapon is enabled.
    %obj.fireWeapon = true;
    %obj.setImageTrigger(2, false);
    %obj.setImageTrigger(3, true);
  • is there a way to make it so that the veh can go through
    everything except the player?
Sign In or Register to comment.