Author Topic: My vehicle runs people over only in LAN & Singleplayer  (Read 3398 times)

It was a guess. I'm not positive, did you try looking at the Jeep vehicle?
I did, that's where I got the code to make the vehicle damage bots and players on impact through the datablock. And as I said it works perfectly in single player and LAN. Which is weird because I can obviously run someone over with a jeep in multiplayer.

This is my code:
Code: [Select]
function Player::startSkiJumping(%obj)
{
//make a new ski vehicle and mount the player on it

%vector = %obj.getEyeVector();
%rotation = %obj.getEulerRotation();
%client = %obj.client;
%position = %obj.getTransform();
%posX = getword(%position, 0);
%posY = getword(%position, 1);
%posZ = getword(%position, 2);
%rot = getWords(%position, 3, 12);
%obj.schedule(250,Tuck);

%posZ += 0.3;

%vel = %obj.getVelocity();

%newcar = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
initialPosition = %posX @ " " @ %posY @ " " @ %posZ;
};
// %newcar.setTransform(%posX @ " " @ %posY @ " " @ %posZ @ " " @ %rot);
%newcar.setTransform(%position SPC %vector SPC %rotation);
// %newcar.settransform(%obj.gettransform());
%newcar.addVelocity("0 0 10");
%newcar.schedule(150, mountObject, %obj, 0);
%newcar.addVelocity(%vel);

}
Code: [Select]
datablock WheeledVehicleData(skijumpVehicle)
{
//tagged fields
doSimpleDismount = false; //just unmount the player, dont look for a free space
maxDismountDist = 0;

   numMountPoints = 1;

   category = "Vehicles";
   shapeFile = "add-ons/Item_skis/skiVehicle.dts";
//   shapeFile = "Add-ons/vehicle_jeep/jeep.dts";
   emap = true;

   maxDamage = 1.0;
   destroyedLevel = 0.5;

   maxSteeringAngle = 1.800;  // Maximum steering angle, should match animation
   tireEmitter = ParkourPhysicsEmitter; // All the tires use the same dust emitter

   // 3rd person camera settings
   cameraRoll = false;         // Roll the camera with the vehicle?
   cameraMaxDist = 7.5;         // Far distance from vehicle
   cameraOffset = 4.4;        // Vertical offset from camera mount point
   cameraLag = 0.0;           // Velocity lag of camera
   cameraDecay = 1.75;  //0.75;      // Decay per sec. rate of velocity lag
   cameraTilt = 0.3201; //tilt adjustment for camera: ~20 degrees down

   // Rigid Body
   mass = 50; //was 90
   density = 0.5;
   massCenter = "0 0 0";    // Center of mass for rigid body
   massBox = "1.5 1.5 1.5";         // Size of box used for moment of inertia,
                              // if zero it defaults to object bounding box
   drag = 0.8; //was 0.8                // Drag coefficient
   bodyFriction = 0.21; //was 0.21
   bodyRestitution = 0.2; //was 0.2
   minImpactSpeed = 0;        // Impacts over this invoke the script callback
   softImpactSpeed = 3;       // Play SoftImpact Sound
   hardImpactSpeed = 10;      // Play HardImpact Sound
   integration = 10;           // Physics integration: TickSec/Rate
   collisionTol = 0.1;        // Collision distance tolerance
//   contactTol = 0.000000000000000000000001;          // Contact velocity tolerance
   contactTol = 0.1;

isSled = false; //if its a sled, the wing surfaces dont work unless its on the ground

   // Engine
   engineTorque = 3500;       // Engine power
   engineBrake = 25;         // Braking when throttle is 0
   brakeTorque = 80000;        // When brakes are applied
   maxWheelSpeed = 30;        // Engine scale by current speed / max speed

forwardThrust = 00; //500
reverseThrust = 00;
lift = 10;
maxForwardVel = 80;
maxReverseVel = 20;
horizontalSurfaceForce = 50; //50
verticalSurfaceForce = 50;
rollForce = 4000; //was 1600
yawForce = 6000; //was 1600
pitchForce = 12000; //was 12000
rotationalDrag = 1; //1
stallSpeed = 0;

steeringAutoReturn = true;
steeringAutoReturnRate = 5.0;
steeringAutoReturnMaxSpeed = 20;
steeringUseStrafeSteering = false; //this vehicle has pitch control, so we can't use strafe steering


   // Energy
   maxEnergy = 0;
   jetForce = 0;
   minJetEnergy = 30;
   jetEnergyDrain = 2;

   hardImpactSound = Impact1BSound;

speedDamageScale = 1.04;
collDamageThresholdVel = 2.0;
collDamageMultiplier   = 0.02;

minRunOverSpeed    = 1;   //how fast you need to be going to run someone over (do damage)
      runOverDamageScale = 3;   //when you run over someone, speed * runoverdamagescale = damage amt
      runOverPushScale   = 3; //how hard a person you're running over gets pushed
};
Code: [Select]
package ParkourPhysics
{
   function Armor::onTrigger(%this,%obj,%slot,%val)
   {
      %r = Parent::onTrigger(%this,%obj,%slot,%val);
      if(%obj.isTap)
          {
                        if(%slot == 2 && !%val && %this.canParkour && $parkourphysics::enabled)
                            {
                                if(%obj.getMountedImage(2) $= ParkourJumpCheckImage.getID())
                                   return %r;
                                %tapped = 0;
%obj.schedule(150,"startSkiJumping");
        %obj.mountImage(ParkourJumpCheckImage,2);
%obj.playthread(3,fall);
                            }
                    }
                else
                    {
                        if(%slot == 2 && !%val)
                            {
                                %tapped = 1;
                            }
                    }
                cancel(%obj.tapsche);
                if(%slot == 2)
                    {
                        %obj.isTap=0;
                        %obj.tapsche = schedule(200,0,eval,%obj@".isTap=1;");
                    }
   }
};activatePackage(ParkourPhysics);

Nvm that wasn't the problem.
« Last Edit: October 29, 2012, 09:41:49 PM by tommybricksetti »

Ok I tested in Multiplayer, and this vehicle is able to run people and bots over, YES! But you still can't do it from Parkour Mode. So I now know that it must be in how I spawn the vehicle that is the problem.
Code: [Select]
datablock WheeledVehicleData(skijumpVehicle)
{
//tagged fields
doSimpleDismount = false; //just unmount the player, dont look for a free space
maxDismountDist = 0;

   numMountPoints = 1;

   category = "Vehicles";
   shapeFile = "add-ons/Item_skis/skiVehicle.dts";
//   shapeFile = "Add-ons/vehicle_jeep/jeep.dts";
   emap = true;

   maxDamage = 1.0;
   destroyedLevel = 0.5;

   uiName = "Parkour Physics Vehicle";
   rideable = true;

   maxSteeringAngle = 1.800;  // Maximum steering angle, should match animation
   tireEmitter = ParkourPhysicsEmitter; // All the tires use the same dust emitter

   // 3rd person camera settings
   cameraRoll = false;         // Roll the camera with the vehicle?
   cameraMaxDist = 7.5;         // Far distance from vehicle
   cameraOffset = 4.4;        // Vertical offset from camera mount point
   cameraLag = 0.0;           // Velocity lag of camera
   cameraDecay = 1.75;  //0.75;      // Decay per sec. rate of velocity lag
   cameraTilt = 0.3201; //tilt adjustment for camera: ~20 degrees down

   // Rigid Body
   mass = 50; //was 90
   density = 0.5;
   massCenter = "0 0 0";    // Center of mass for rigid body
   massBox = "1.5 1.5 1.5";         // Size of box used for moment of inertia,
                              // if zero it defaults to object bounding box
   drag = 0.8; //was 0.8                // Drag coefficient
   bodyFriction = 0.21; //was 0.21
   bodyRestitution = 0.2; //was 0.2
   minImpactSpeed = 0;        // Impacts over this invoke the script callback
   softImpactSpeed = 3;       // Play SoftImpact Sound
   hardImpactSpeed = 10;      // Play HardImpact Sound
   integration = 10;           // Physics integration: TickSec/Rate
   collisionTol = 0.1;        // Collision distance tolerance
//   contactTol = 0.000000000000000000000001;          // Contact velocity tolerance
   contactTol = 0.1;
   justcollided = 0;

isSled = false; //if its a sled, the wing surfaces dont work unless its on the ground

   // Engine
   engineTorque = 3500;       // Engine power
   engineBrake = 25;         // Braking when throttle is 0
   brakeTorque = 80000;        // When brakes are applied
   maxWheelSpeed = 30;        // Engine scale by current speed / max speed

forwardThrust = 00; //500
reverseThrust = 00;
lift = 10;
maxForwardVel = 80;
maxReverseVel = 20;
horizontalSurfaceForce = 50; //50
verticalSurfaceForce = 50;
rollForce = 4000; //was 1600
yawForce = 6000; //was 1600
pitchForce = 12000; //was 12000
rotationalDrag = 1; //1
stallSpeed = 0;

steeringAutoReturn = true;
steeringAutoReturnRate = 5.0;
steeringAutoReturnMaxSpeed = 20;
steeringUseStrafeSteering = false; //this vehicle has pitch control, so we can't use strafe steering


   // Energy
   maxEnergy = 0;
   jetForce = 0;
   minJetEnergy = 30;
   jetEnergyDrain = 2;

   hardImpactSound = Impact1BSound;

speedDamageScale = 1.04;
collDamageThresholdVel = 2.0;
collDamageMultiplier   = 0.02;

minRunOverSpeed    = 1;   //how fast you need to be going to run someone over (do damage)
      runOverDamageScale = 3;   //when you run over someone, speed * runoverdamagescale = damage amt
      runOverPushScale   = 3; //how hard a person you're running over gets pushed
};

Ok so there is something either wrong or missing here:
Code: [Select]
function Player::startSkiJumping(%obj)
{
//make a new ski vehicle and mount the player on it

%vector = %obj.getEyeVector();
%rotation = %obj.getEulerRotation();
%client = %obj.client;
%position = %obj.getTransform();
%obj.schedule(350,Tuck);

%posZ += 0.3;

%vel = %obj.getVelocity();

%newcar = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
};MissionCleanup.add(%newcar);
%newcar.setTransform(%position SPC %vector SPC %rotation);
// %newcar.settransform(%obj.gettransform());
%newcar.addVelocity("0 0 10");
%newcar.schedule(150, mountObject, %obj, 0);
%newcar.addVelocity(%vel);
%newcar.changedatablock("skijumpvehicle");
}

Tried this, but it still didn't work.
Code: [Select]
function Player::startSkiJumping(%obj)
{
//make a new ski vehicle and mount the player on it

%vector = %obj.getEyeVector();
%rotation = %obj.getEulerRotation();
%client = %obj.client;
%position = %obj.getTransform();
%obj.schedule(350,Tuck);

%posZ += 0.3;

%vel = %obj.getVelocity();

%newvehicle = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
};MissionCleanup.add(%newcar);
%newvehicle.setTransform(%position SPC %vector SPC %rotation);
// %newvehicle.settransform(%obj.gettransform());
%newvehicle.addVelocity("0 0 10");
%newvehicle.schedule(150, mountObject, %obj, 0);
%newvehicle.addVelocity(%vel);
%newvehicle.changedatablock("skijumpvehicle");
}

There's two different sets of game variables, one for single player and LAN and one for network servers. My guess is that somewhere you have something enabled in LAN that isn't enabled on NET.

No - Badspot made Singleplayer/LAN minigame damage be Always On in v21, but in Multiplayer you still have to be in a minigame with vehicle damage enabled or running someone over won't work.

OH DUH! So the problem is that the new vehicle is not in the current minigame? So I just need to figure out how to
Code: [Select]
%newcar.setminigame(%current); and have
Code: [Select]
%current = %obj.getMinigameFromObject(%obj); my code for this currently doesn't work though.
Code: [Select]
function Player::startSkiJumping(%obj)
{
//make a new ski vehicle and mount the player on it

%obj.getMinigameFromObject()

%vector = %obj.getEyeVector();
%rotation = %obj.getEulerRotation();
%client = %obj.client;
%position = %obj.getTransform();
%obj.schedule(350,Tuck);

%posZ += 0.3;

%vel = %obj.getVelocity();

%newvehicle = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
};MissionCleanup.add(%newcar);
// %newvehicle.
%newvehicle.setTransform(%position SPC %vector SPC %rotation);
// %newvehicle.settransform(%obj.gettransform());
%newvehicle.addVelocity("0 0 10");
%newvehicle.schedule(150, mountObject, %obj, 0);
%newvehicle.addVelocity(%vel);
%newvehicle.changedatablock("skijumpvehicle");
}

function SetMinigame(%client)
{
currentMinigame.addmember(%newvehicle);
}

function Player::getMinigameFromObject(%obj)
{
// %obj.playthread(3,look);
schedule(0, 0, "SetMinigame", %client);
}
« Last Edit: October 31, 2012, 11:03:40 AM by tommybricksetti »

Here's my latest code:
Code: [Select]
function Player::startSkiJumping(%obj)
{
//make a new ski vehicle and mount the player on it

%obj.getMinigameFromObject();
// %minigame = %obj.getMinigameFromObject();

%vector = %obj.getEyeVector();
%rotation = %obj.getEulerRotation();
%client = %obj.client;
%position = %obj.getTransform();
%obj.schedule(350,Tuck);

%posZ += 0.3;

%vel = %obj.getVelocity();

%newvehicle = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
};MissionCleanup.add(%newvehicle);
// %newvehicle.setTransform(%position SPC %vector SPC %rotation);
%newvehicle.setTransform(%position);
// %newvehicle.settransform(%obj.gettransform());
%newvehicle.addVelocity("0 0 10");
%newvehicle.schedule(150, mountObject, %obj, 0);
%newvehicle.addVelocity(%vel);
%newvehicle.changedatablock("skijumpvehicle");
}

function Player::getMinigameFromObject(%obj)
{
%obj.schedule(100,PrepareTrick);
}

function Player::PrepareTrick(%obj)
{
%obj.playthread(3,armreadyboth);
}
The
Code: [Select]
%obj.schedule(100,PrepareTrick);part adds a fluid animation to the flip, but its true purpose is to prove that
Code: [Select]
getMinigameFromObject(%obj)works. And it does. All I need now is to apply this minigame to the current vehicle that the player is mounted to. That or all skijumpvehicles in the server permanently as opposed to on a per client basis every time someone enters Parkour Physics mode.

.minigame = getminigamefromobject(%OBJ); or .minigame = %obj.minigame; or the object's client's minigame

So this?
Code: [Select]
%newvehicle = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
minigame = getminigamefromobject(%obj);
};MissionCleanup.add(%newvehicle);
Because I got no console errors but it didn't work. Let me try resetting my server.

So this?
Code: [Select]
%newvehicle = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
minigame = getminigamefromobject(%obj);
};MissionCleanup.add(%newvehicle);
Because I got no console errors but it didn't work. Let me try resetting my server.
Is %obj defined somewhere before this? If so, that should work.

It's not, but what should I define it as?
Code: [Select]
%obj = %client;
Code: [Select]
%obj = %client.obj;
Code: [Select]
%obj = %player.obj;all don't work. They create console spam that makes the game unplayable eventually.

It's not, but what should I define it as?
Code: [Select]
%obj = %client;
Code: [Select]
%obj = %client.obj;
Code: [Select]
%obj = %player.obj;all don't work. They create console spam that makes the game unplayable eventually.
Replace minigame = getminigamefromobject(%obj); with minigame = %client.minigame;

So this?
Code: [Select]
%client = %obj.client;
Code: [Select]
        %newvehicle = new WheeledVehicle()
{
dataBlock = skijumpvehicle;
client = %client;
minigame = %client.minigame;
};MissionCleanup.add(%newvehicle);
The problem is definitely that vehicle damage is off by default for my skijumpvehicle. The most obvious explanation is that the vehicle is not currently in my minigame. That or, vehicle damage is turned off for this specific vehicle by default. But... that wouldn't make sense because of what happens in singleplayer or LAN.

In singleplayer or LAN, vehicles cannot run over players or bots outside of a minigame. Also, within a minigame they can't do so without vehicle damage being on. But, when vehicle damage is on, my parkour physics vehicle (skijumpvehicle) can damage both players and bots. This leads me to believe that in singleplayer, since only one minigame can be made, all vehicles are considered members of this minigame. The odd thing is, that in LAN, it works as long as all players are in the current minigame. But in multiplayer it doesn't work regardless of that. Also, I tested in multiplayer by making my Parkour Physics Vehicle spawnable on a spawn brick. I spawned it above a horse and let it fall. The result was it damaged  the horse. It also damaged players as well. So the most obvious answer again is that my vehicle is not in the minigame when spawned through the code. This would explain why it works in both singleplayer normally and multiplayer when spawned via a brick.
« Last Edit: November 04, 2012, 02:39:57 AM by tommybricksetti »