Blockland Forums > Suggestions & Requests
Player Control Other Vehicles
<< < (3/3)
Light And Day:
package RcController
{
   function WheeledVehicleData::OnTrigger(%this, %obj, %triggerNum, %val)
   {
         if(%val)
      {
               if(%triggerNum == 4)
         {
            %Client = %obj.getControllingClient();
            switch(%Client.isRcing)
            {
               case 0:
                  Parent::OnTrigger(%this, %obj, %triggerNum, %val);
               case 1:
                  servercmdTurnOff(%Client);
            }
         }
      }
   }

   function FlyingVehicleData::OnTrigger(%this, %obj, %triggerNum, %val)
   {
         if(%val)
      {
               if(%triggerNum == 4)
         {
            %Client = %obj.getControllingClient();
            switch(%Client.isRcing)
            {
               case 0:
                  Parent::OnTrigger(%this, %obj, %triggerNum, %val);
               case 1:
                  servercmdTurnOff(%Client);
            }
         }
      }
   }
};
ActivatePackage(RcController);

function RCControllerImage::onFire(%This,%Player,%Slot)
{
   %Client = %Player.Client;
   InitContainerRadiusSearch (%Player.getPosition(),2,$TypeMasks::VehicleObjectType);
   while((%Vehicle = ContainerSearchNext()) != 0 )
   {
      %VehicleNum++;
      %ConVehicle = %Vehicle;
   }
   if(%ConVehicle $= %Player.getObjectMount())
   {
   }
   else if(%VehicleNum <= 0 || !isObject(%ConVehicle))
   {
      commandToClient(%Client,'centerprint',"You must be near a vehicle.",1);
   }
   else if(%VehicleNum > 1)
   {
      commandToClient(%Client,'centerprint',"To many vehicles around.",1);
   }
   else if(%ConVehicle.getControllingClient() || %ConVehicle.isRC)
   {
      commandToClient(%Client,'centerprint',"That vehicle is already being driven.",1);
   }
   else if(getTrustLevel(%ConVehicle.spawnbrick.client,%Client.player) < 2)
   {
      commandToClient(%Client,'CenterPrint',%ConVehicle.spawnBrick.getGroup().name SPC "does not trust you enough to RC this.",3);
   }
   else if(!%Client.isRcing)
   {
      %Client.RCVehicle = %ConVehicle;
      %Client.isRcing = 1;
      %ConVehicle.isRC = 1;
      CheckRcDistance(%Client,%Player,%ConVehicle);
      commandToClient(%Client,'centerprint',"The RC Controller is now on.",1);
   }
}

function CheckRcDistance(%Client,%Player,%Vehicle)
{
   if(isObject(%Player) && isObject(%Vehicle))
   {
      %Player.setControlObject(%Vehicle);
      %PPos = %Player.getPosition();
      %VPos = %Vehicle.getPosition();
      %Vec = VectorSub(%PPos,%VPos);
      %Len = VectorLen(%Vec);
      %Len = %Len / 0.5;
      %Len = %Len - 1;
      if(%Len < 2500 && %Len > 2200)
      {
         commandToClient(%Client,'centerprint',"WARNING!: ALMOST OUT OF RANGE!",0.6);
      }
      else if(%Len > 2500)
      {
         serverCmdTurnOff(%Client);
         return;
      }
      %Player.Client.RcEvent = schedule(500,0,"CheckRcDistance",%Client,%Player,%Vehicle);
   }
   else
   {
      servercmdTurnOff(%Client);
   }
}

function servercmdTurnOff(%Client)
{
   if(%Client.isRcing)
   {
      %Client.RCVehicle.setVelocity("0 0 0");
      %Client.RCVehicle.isRC = 0;
      %Client.player.setControlObject(%Client.Player);
      %Client.isRcing = 0;
      cancel(%Client.RcEvent);
      commandToClient(%Client,'centerprint',"The RC Controller is now off.",1);
   }
   else
   {
      commandToClient(%Client,'centerprint',"The RC Controller is already off.",1);
   }
}

RC controler script. Now lets see what we can do with it?
package VehicleControl
{
   function WheeledVehicleData::OnTrigger(%this, %obj, %triggerNum, %val)
   {
         if(%val)
      {
               if(%triggerNum == 4)
         {
            %Client = %obj.getControllingClient();
            switch(%Client.isControling)
            {
                  Parent::OnTrigger(%this, %obj, %triggerNum, %val);
            }
         }
      }
   }

   function FlyingVehicleData::OnTrigger(%this, %obj, %triggerNum, %val)
   {
         if(%val)
      {
               if(%triggerNum == 4)
         {
            %Client = %obj.getControllingClient();
            switch(%Client.isControllinging)
            {
                  Parent::OnTrigger(%this, %obj, %triggerNum, %val);
            }
         }
      }
   }
};
ActivatePackage(VehicleControl);
That can begin it. With you know... The thing that trigger... I have no clue. Maybe that enables it? What ever ^_^
phflack:
...
i just searched vehicle, first page: http://forum.blockland.us/index.php?topic=90852.0
Light And Day:

--- Quote from: phflack on April 04, 2010, 12:08:53 PM ---...
i just searched vehicle, first page: http://forum.blockland.us/index.php?topic=90852.0

--- End quote ---
You have earned your self the name,
God.
Navigation
Message Index
Previous page

Go to full version