PtokaX forum

Archive => Archived 4.0 boards => Request for Lua 4 scripts => Topic started by: barbosa on 04 February, 2005, 13:11:33

Title: Boat
Post by: barbosa on 04 February, 2005, 13:11:33
Hi :)

   I was looking for some possible pointers or help.  I have a boat.lua script out of the game far cry, and have been trying to modify the boat so it accepts a passenger(hopefully an extra gunner, if i can get a passenger to sit in the boat) all land vehicles in the game accept passengers, and the boats have a driver and gunner.

The relevant physical boat modifications have been done.((((ingame helper objects on the model which are specified in the script to follow))))))))))))

In the following i shall type in $ $ brackets a description of the relevant ingame items that i know of,so u may get a rough idea of wat the heck it is, most arent even relevant, but i shall include them anyway, just incase.


--#Script.ReloadScript("SCRIPTS/Default/Entities/Vehicles/boat.lua")
   Boat = {
--   type = "Vehicle",
   IsBoat = 1,

   ammoMG = 500,
   ammoRL = 30,
   
   -- [kirill] vehicle gets different damage depending on who's shooter
   -- defines the intensity of the damage caused by the weapons to
   -- the vehicle   
   
   --
   DamageParams = {
      fDmgScaleAIBullet = 0.1,
      fDmgScaleAIExplosion = 0.335,--patch2:vehicles must explode with 1 missile --before was 0.4,  
      fDmgScaleBullet = 0.25,
      fDmgScaleExplosion = 0.25,--patch2:vehicles must explode with 1 missile --before was 1,  
      
      dmgBulletMP = 1.0,--if this value exist in multiplayer will be used this damage for every bullet ,
              --so for instance, no difference between a sniper rifle and a desert eagle.
              --Vehicles have 100 points of health.
              --in this case 100 bullets are needed to destroy the vehicle.
   },
   
   --model to be used for destroyed vehicle
   fileModelDead = "objects/Vehicles/gunboat/gunboat_wreck.cgf",
   fileGunModel = "Objects/Vehicles/Mounted_gun/mounted_gun_with_RL.cga",   
   
   fPartUpdateTime = 0,
   fGroundtime = 0,
   dWeapon = 0,
   tpvStateD = 0,

   --entering fake_jump/blending staff
   entVel = 9,

   userCounter = 0,
   driverWaiting = 1,
   driverDelay = 0,
   passengerLimit = 1, $$$$here i changed the passenger limit from 0 to 1 which holds true to other scripts with 1 passenger$$$$$

   curPathStep = 0,
   
   -- previous state on the client before entering the vehicle
   bDriverInTheVehicle = 0,
   -- previous driver on the client before leaving the vehicle
   pPreviousDriver=nil,
   -- previous passenger state on the client before entering the vehicle
   bPassengerInTheVehicle = 0,
   -- previous passenger on the client before leaving the vehicle
   pPreviousPassenger=nil,

   IsPhisicalized = 0,   
      
   
--/////////////////////////////////////////////////////////////////////////
-- damage stuff
   -- particle system to display when the vehicle is damaged stage 1
   Damage1Effect = "smoke.vehicle_damage1.a",
   -- particle system to display when the vehicle is damaged stage 2
   Damage2Effect = "smoke.vehicle_damage2.a",
   -- particle system to display when the vehicle explodes
   ExplosionEffect = "explosions.4WD_explosion.a",
   -- particle system to display when the vehicle is destroyed
   DeadEffect = "fire.burning_after_explosion.a",
   -- material to be used when vehicle is destroyed
   DeadMaterial = "Vehicles.Gunboat_Screwed",


   szNormalModel="objects/Vehicles/gunboat/gunboat.cgf",
   -- szNormalModel="objects/Vehicles/patrolboat/patrolboat_hull.cgf",

   PropertiesInstance = {
      sightrange = 220,
      soundrange = 10,   -- rememeber that sound ranges intersect and sound range for AI doubles when in alert
      aibehavior_behaviour = "Boat_idle",      
      groupid = 154,
      bUsable = 1,      -- if this boat can be used by _localplayer
   },


   Properties = {

      bHasRockets = 1,-- to be able to have boats with no rockets - empty RL ammo
      bActive = 1,   -- if vehicle is initially active or needs to be activated
            -- with Event_Activate first
      bUseRL = 0,   -- weapon for gunner is RocketLauncher
      bUseRLguided = 0,   -- weapon for gunner is COVERRL   
      damage_players = 1,$$can damage players yes$$$

      sDriverName = "",
--      bHasMWeapon = 1,$$ boat has mounted weapon yes$$$
   
      bLightsOn = 0, $$$boat lights on no$$$

      fAISoundRadius = 30,$$$ sound radius the enemy can hear u within$$$

      AttackParams = {
         sightrange = 220,
         horizontal_fov = -1,$$
      },
   
      GunnerParams = {
         responsiveness = 50,
         sightrange = 150,$$$how far gunner can see$$$
         attackrange = 350,$$maximum distance gunner can attack u in$$$
         horizontal_fov = -1,
--         aggression = 1,$$$controls gunner agression$$$
--         accuracy = 1,$$controls gunner accuracy$$$
      },
      
      bSetInvestigate = 0,$boat wont investigate$$
      bSameGroupId = 1,      -- send signals withing same group
      
      bLandOnPlayerLand=0,
      bTrackable=1,$$$trackable with binocolurs yes$$$
      fileName = "objects/Vehicles/gunboat/gunboat.cgf",$$ game model name$$$
      --fileName = "objects/Vehicles/gunboat/gunboat.cgf",$$ game model name$$$               
            
      fStartDelay = 2,
      
      bDrawDriver = 0,
      damping = 0.1,
      water_damping = 0,
      water_sleep_speed = 0.015,
      water_resistance = 1000,
      fLimitLRAngles = 150,
      fLimitUDMinAngles = -45,
      fLimitUDMaxAngles = 40,
      
      ExplosionParams = {
         nDamage = 900,
         fRadiusMin = 8.0, -- default 12
         fRadiusMax = 10, -- default 35.5
         fRadius = 10, -- default 17
         fImpulsivePressure = 200, -- default 200
      },
-- those are AI related properties
      pointReinforce = "Drop",
      pointBackOff = "Base",
      aggression = 1.0,
      commrange = 100.0,
      cohesion = 5,
      attackrange = 70,
      horizontal_fov = -1,
      vertical_fov =90,
      eye_height = 2.1,
      max_health = 70,
      accuracy = 0.6,
      responsiveness = 7,
      species = 1,
      fSpeciesHostility = 2,
      fGroupHostility = 0,
      fPersistence = 0,
      aicharacter_character = "BoatGun",
      bodypos = 0,
      pathname = "none",$$can be set ingame to follow path using this and the 2 following path entrys$$$
      pathsteps = 0,
      pathstart = 0,
      forward_speed = 1,   -- don't scale down fwd impuls - max speed
      
      
      bUsePathfind = 0,   -- pathfind when outdoors
   },

   
--   boat_params={
--      Dumprot       = 6000,
--      Dumpv      = 700,
----      Dumprot       = 12000,
----      Dumpv      = 1400,
--      Dumpvh      = 10000,
--      Dumpw      = 2000,   --waves dump
--      Turn      = 12000,
--      Speedv      = 20000,
--      Speedturnmin   = 3,
--      Stand      = 10000,   -- forsing to normal vertical position impuls
--      WaveM      = 200,   --fake waves momentum
--      TiltTurn   = 130,   --tilt momentum when turning
--      fMass       = 800,
--      Flying      = 0,
--   },

--UBI changes - new boat settings


   boat_paramsAI={
      Damprot       = 50000, --8000,
      Dampv      = 10500, --3500,
      Dampvs      = 33500, --3500,
      Dampvh      = 100000,
--      Dampw      = 30000,   --waves dump
      Dampw      = .3,   --waves damp
      Turn      = 200000,   --200000
      Speedv      = 275000,--115000,
      Speedturnmin   = .5,
      Stand      = 100000,   -- forsing to normal vertical position impuls
      WaveM      = 100,   --fake waves momentum
      TiltTurn   = 1570,   --tilt momentum when turning
      TiltSpd      = 100,   --tilt momentum when speeding up
      TiltSpdA   = 0.06,   --tilt momentum when speeding up (acceleration thrhld)
      TiltSpdMinV   = 10.0,   --tilt momentum when speeding up (min speed to tilt when not accelerating)
      TiltSpdMinVTilt   = 0.37,   --tilt momentum when speeding up (how much to tilt when not accelerating)
      fMass       = 15000,
      Flying      = 0,
      
      StandInAir   = 10000,   -- forsing to normal vertical position impuls, when in air.
      gravity      = -9.81,--gravity , used whe the boat is jumping
   },

---------------------------- HERE

   boat_params={
      Damprot       = 50000, --8000,
      Dampv      = 4500, --3500,
      Dampvs      = 33500, --3500,
      Dampvh      = 100000,
--      Dampw      = 300000,   --waves dump
      Dampw      = .3,   --waves damp            
      Turn      = 42000,   --7000
      TurnMin      = 38000,   --7000
      TurnVelScale   = 10,
      Speedv      = 175000,--115000,
      Speedturnmin   = 3,
      Stand      = 350000,   -- forsing to normal vertical position impuls
      WaveM      = 10000,   --fake waves momentum
      TiltTurn   = 2770,   --tilt momentum when turning
      TiltSpd      = 3500,   --tilt momentum when speeding up
      TiltSpdA   = 0.05,   --tilt momentum when speeding up (acceleration thrhld)
      TiltSpdMinV   = 10.0,   --tilt momentum when speeding up (min speed to tilt when not accelerating)
      TiltSpdMinVTilt   = 0.17,   --tilt momentum when speeding up (how much to tilt when not accelerating)
      fMass       = 15000,
      Flying      = 0,
      
      StandInAir   = 10000,   -- forsing to normal vertical position impuls, when in air.
      gravity      = -9.81,--gravity , used whe the boat is jumping
      
      CameraDist   = 8.5,
   
      


 
Title:
Post by: barbosa on 04 February, 2005, 13:12:49
--      Damprot       = 50000, --8000,
--      Dampv      = 4500, --3500,
--      Dampvs      = 33500, --3500,
--      Dampvh      = 100000,
--      Dampw      = 300000,   --waves dump
--      Turn      = 42000,   --7000
--      TurnMin      = 38000,   --7000
--      TurnVelScale   = 10,
--      Speedv      = 175000,--115000,
--      Speedturnmin   = 3,
--      Stand      = 350000,   -- forsing to normal vertical position impuls
--      WaveM      = 10000,   --fake waves momentum
--      TiltTurn   = 2770,   --tilt momentum when turning
--      TiltSpd      = 3500,   --tilt momentum when speeding up
--      TiltSpdA   = 0.05,   --tilt momentum when speeding up (acceleration thrhld)
--      TiltSpdMinV   = 10.0,   --tilt momentum when speeding up (min speed to tilt when not accelerating)
--      TiltSpdMinVTilt   = 0.17,   --tilt momentum when speeding up (how much to tilt when not accelerating)
--      fMass       = 15000,
--      Flying      = 0,
   },
   
   
--UBI changes - over
   
--   b_speedv = 1200,  -- controls boat speed (movement forward/backward impulse)
--   b_turn = 100,  -- controls how fast boat turns (turning left/right impulse)
--   fMass = 2500,

   sound_time = 0,

   particles_updatefreq = 0.24, --initial frequency of updating particles

   partDmg_time = 0,


--// particles definitions
--////////////////////////////////////////////////////////////////////////////////////////$$following just ingame effects$$$

   WaterParticle = {--boat engines affecting the water (splashes behind the boat)
      focus = 20,
      speed = 2.0,
      count = 7,
      size = 1.8,
      size_speed=0.01,
      gravity={x=0,y=0,z=-3.4},
      rotation={x=1,y=1,z=2},
      lifetime= 1.2,
      tid = System:LoadTexture("textures\\water_splash"),
      start_color = {1,1,1},
      end_color = {1,1,1},
      blend_type = 0,
      frames=0,
      draw_last=1,
         },

   WaterFogTrail=  {
            focus = 50,
            start_color = {1,1,1},
            end_color = {1,1,1},
            gravity = {x = 0.0,y = 0.0,z = -6.5}, --default z = -6.5
            rotation = {x = 0.0, y = 0.0, z = 2},
            speed = 12, -- default 12
            count = 6,
            size = 1,
            size_speed=2.50, --default = 15
            lifetime= 1.0, --default = 3.5
            tid = System:LoadTexture("textures\\dirt2"),---clouda2.dds
            frames=1,
            blend_type = 0
         },
   WaterSplashes=
         { --boat engines affecting the water (trail thats left behind the boat)
            focus = 60.0,
            start_color = {1,1,1},
            end_color = {1,1,1},
            gravity = {x = 0.0,y = 0.0,z = 0.0},
            rotation = {x = 0.0, y = 0.0, z = 0.5},
            speed = 2,
            count = 2,
            size = 5.0,
            size_speed=20,
            lifetime= 9.0,
            tid = System:LoadTexture("textures\\water_splash"),
            frames=1,
            blend_type = 0,
            particle_type=1
         },

   PropellerWake=
         { --PropellerWake
            focus = 20.0,
            start_color = {1,1,1},
            end_color = {1,1,1},
            gravity = {x = 0.0,y = 0.0,z = 0.0},
            rotation = {x = 0.0, y = 0.0, z = 0.1},
            speed = 6,
            count = 2,
            size = 4.0,
            size_speed=4.0,
            lifetime= 6.0,
            tid = System:LoadTexture("textures\\water_splash"),
            frames=1,
            blend_type = 0,
            particle_type=1
         },

   bExploded=false,

   -- engine health, status of the vehicle
   -- default is set to maximum (1.0f)
   fEngineHealth = 100.0,

   -- damage inflicted to the vehicle when it collides
   fOnCollideDamage=0.75,
   -- damage inflicted to the vehicle when it collides with terrain (falls off)
   fOnCollideGroundDamage=0.75,
   
   --damage when colliding with another vehicle, this value is multiplied by the hit.impact value.
   fOnCollideVehicleDamage=3.5,


   bGroundVehicle=0,

   -- to smooth speed changes
   timecount=0,
   previousTimes={},
$$$note in the following all PVS_ entrys are defined in another script, so all PVS_ entrys in other vehicle scripts.. have a PVS_driver or PVS_passenger or PVS_gunner
   driverT = {
      type = PVS_DRIVER,
   
      helper = "driver",
      in_helper = "driver_sit_pos",
      sit_anim = "gunboat_driver_sit",
      anchor = AIAnchor.AIANCHOR_BOATENTER_SPOT,
      out_ang = -90,
      message = "@driverboat",
      timePast=0,
      HS=0,   -- used for fake jump arch calculatio - arch scale
      HK=0,   -- used for fake jump arch calculatio
      HO=0,   -- used for fake jump arch calculatio   
      HT=0,   -- used for fake jump arch calculatio
      
      animations = {
         "gunboat_driver_sit",      -- idle in animation
         "gunboat_driver_moving",      -- driving firward
         "gunboat_driver_forward_hit",   -- impact / break
         "gunboat_driver_leftturn",   -- turning left
         "gunboat_driver_rightturn",   -- turning right
         "gunboat_driver_reverse",   -- reversing
         "gunboat_driver_reverse_hit",   -- reversing impact / break
      },
   },

   

        --seats
   

        gunnerT = {
           type = PVS_GUNNER,
   
      helper = "gunner",
      in_helper = "gunner_sit_pos",
      sit_anim = "gunboat_gunner_sit",
      anchor = AIAnchor.AIANCHOR_BOATENTER_SPOT,
      out_ang = -90,
      message = "@gunnerboat",
      timePast=0,
      HS=0,   -- used for fake jump arch calculatio - arch scale
      HK=0,   -- used for fake jump arch calculatio
      HO=0,   -- used for fake jump arch calculatio   
      HT=0,   -- used for fake jump arch calculatio
   },
$$$$the following passenger line i added$$$$   
   passengersTT = {
      type = PVS_PASSENGER,
      
      helper = "passenger",$$$helper object in the physical model$$$
      in_helper = "passenger_sit_pos",$$$another helper on the boat object$$$
                sit_anim = "gunboat_driver_sit",$$$ character animation used when he sits down(my passenger if he sits should look like hes holding the mounted boat gun$$$
      anchor = AIAnchor.AIANCHOR_BOATENTER_SPOT, $$$an object placed ingame to hint the drivers where to enter the boat$$$
      out_ang = -90,
      message = "@passengerboat",
      timePast=0,
      HS=0,   -- used for fake jump arch calculatio - arch scale
      HK=0,   -- used for fake jump arch calculatio
      HO=0,   -- used for fake jump arch calculatio   
      HT=0,   -- used for fake jump arch calculatio
      },
   },

        --canbepushed, if player is in contact with some entity and he is pressing use, its checked this function.
   --can return 3 kind of values:
   --   - nil if the entity cant be pushed
   --   - -1 or 0 if the push force to be used is the player standard
   --   - a different value means a custom push force
   CanBePushed = VC.CanBePushed,
   
   pushpower = 7000,
}
$$$in the game, boats can be pushed back into the water by the player$$$
VC.CreateVehicle(Boat);

--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnReset()
   VC.OnResetCommon(self);

   self.fEngineHealth = 100.0;

   self:NetPresent(1);

   VC.EveryoneOutForce(self);

   self.bExploded=false;
   self.cnt:SetVehicleEngineHealth(self.fEngineHealth);

   --AI stuff
--   self:RegisterWithAI(AIOBJECT_BOAT,self.Properties);
   AI:RegisterWithAI(self.id, AIOBJECT_BOAT,self.Properties,self.PropertiesInstance);
--   AI_HandlersDefault:InitCharacter( self );
   VC.AIDriver( self, 0 );   

   self.curPathStep = 0;

   self.fPartUpdateTime = 0;
   self.fGroundtime = 0;

   
   -- Put physics asleep.
   self:AwakePhysics(0);
   
--front_light
--fron_light_left front_light_right
--back_light_left back_light_right
--textures/lights/front_light
   self.cnt:InitLights( "front_light","textures/lights/front_light",
         "front_light_left","front_light_right","humvee_frontlight",
         "back_light_left", "back_light_right","" );

end


--////////////////////////////////////////////////////////////////////////////////////////
--////////////////////////////////////////////////////////////////////////////////////////
--// CLIENT functions definitions
--////////////////////////////////////////////////////////////////////////////////////////
--////////////////////////////////////////////////////////////////////////////////////////
Boat.Client = {
   OnInit = function(self)
      self:InitClient();
   end,
   OnShutDown = function(self)
      self:OnShutDown();
   end,
   Alive = {
      OnBeginState = function( self )   
         VC.InitBoatCommon(self);
      end,
      OnContact = function(self,player)
          self:OnContactClient(player);
      end,
      OnUpdate = function(self,dt)
          self:UpdateClientAlive(dt);
      end,
      OnCollide = VC.OnCollideClient,
      OnBind = VC.OnBind,
      OnUnBind = VC.OnUnBind,
   },
   Inactive = {
      OnBeginState = function( self )
         self:Hide(1);
      end,
      OnEndState = function( self )
         self.IsPhisicalized = 0;
      end,
   },
   Dead = {
      OnBeginState = function( self )
         VC.BlowUpClient(self);
      end,
      OnContact = function(self,player)
          VC.OnContactClientDead(self,player);
      end,
      OnUpdate = VC.UpdateClientDead,
      OnCollide = VC.OnCollideClient,
      OnUnBind = VC.OnUnBind,
   },
}
--- server stuff
Boat.Server = {
   OnInit = function(self)
      self:InitServer();
   end,
   OnShutDown = function(self)
      self:OnShutDown();
   end,
   Alive = {
      OnBeginState = function( self )   
         VC.InitBoatCommon(self);
      end,
      OnContact = function(self,player)
          self:OnContactServer(player);
      end,
      OnDamage = VC.OnDamageServer,
      OnCollide = VC.OnCollideServer,
      OnUpdate = function(self,dt)
         self:UpdateServer(dt);
      end,
      OnEvent = function (self, id, params)
         self:OnEventServer( id, params);
      end,
   },
   Inactive = {
   },
   Dead = {
      OnBeginState = function( self )
         VC.BlowUpServer(self);
      end,
      OnContact = function(self,player)
          VC.OnContactServerDead(self,player);
      end,
   },
}
Title:
Post by: barbosa on 04 February, 2005, 13:13:40
--////////////////////////////////////////////////////////////////////////////////////////
function Boat:InitClient()


   if( self.Properties.bHasRockets == 0) then
      self.ammoRL = 0;
   end   

   VC.InitSeats(self, Boat);

   --// load sounds on the client
   --////////////////////////////////////////////////////////////////////////////////////////
   
   self.ExplosionSound=Sound:Load3DSound("sounds\\explosions\\explosion2.wav",0,255,150,300);

   --self.drive_sound = Sound:Load3DSound("sounds\\vehicle\\boat\\gunboat_idle.wav",0,185,50,300);
   self.drive_sound = Sound:Load3DSound("sounds\\vehicle\\boat\\gunboat_idle.wav",0,185,30,150);
   self.drive_sound_move = Sound:Load3DSound("sounds\\vehicle\\boat\\splashLP.wav",0,35,10,150);
   self.maxvolume_speed = 25;

   self.accelerate_sound = {
      Sound:Load3DSound("sounds\\vehicle\\rev1.wav",0,0,7,100),
      Sound:Load3DSound("sounds\\vehicle\\rev2.wav",0,0,7,100),
      Sound:Load3DSound("sounds\\vehicle\\rev3.wav",0,0,7,100),
      Sound:Load3DSound("sounds\\vehicle\\rev4.wav",0,0,7,100),
   };
   
   self.engine_start = Sound:Load3DSound("sounds\\vehicle\\boat\\gunboat_start.wav",0,185,30,150);
   self.engine_off = Sound:Load3DSound("sounds\\vehicle\\boat\\gunboat_off.wav",0,185,30,150);
   self.crash_sound = Sound:Load3DSound("sounds\\vehicle\\boat\\gunboathit.wav",0,70,7,100);
   self.land_sound = Sound:Load3DSound("SOUNDS\\Vehicle\\boat\\boatsplash.wav",0,200,7,100);
   self.light_sound = Sound:Load3DSound("SOUNDS/items/flight.wav",SOUND_UNSCALABLE,160,3,30);
   --self.break_sound = Sound:Load3DSound("sounds\\vehicle\\break1.wav",0,0,7,100);
   --self.sliding_sound = Sound:Load3DSound("sounds\\vehicle\\break2.wav",0,0,7,100);

   -- init common stuff for client and server
   VC.InitBoatCommon(self);

   self:InitWeapon();

end

--////////////////////////////////////////////////////////////////////////////////////////
function Boat:UpdateClientAlive(dt)

   if(self.lifeCounter < 100) then
      self.lifeCounter = self.lifeCounter + 1;
   end   

   VC.CreateWaterParticles(self);
   VC.PlayEngineOnOffSounds(self);

   -- create particles and all that
   VC.ExecuteDamageModel(self, dt);

   -- plays the sounds, using a timestep of 0.04       

   -- get vehicle's velocity
   local fCarSpeed = self.cnt:GetVehicleVelocity();

   self.sound_time = self.sound_time + dt;
   if ( self.sound_time > self.particles_updatefreq ) then      

      if(self.fEngineHealth<1)then
         self.particles_updatefreq=0.4;
      end

      -- reset timer
      self.sound_time = 0;

      -- average the last 4 speed frames together to smooth changes out a bit
      -- especially for water vehicles
      self.previousTimes[band(self.timecount,3)]=fCarSpeed;
      self.timecount=self.timecount+1;

      local total=0;   
      for idx, element in self.previousTimes do
         total=total+element;
      end

      if (total<=0.1) then
         total=1;
      end

      fCarSpeed=total/4.0;

            
      VC.PlayDrivingSounds(self,fCarSpeed);
   end
   
   if( self.gunnerT and self.gunnerT.entity ) then
      
      local offsDir=self.gunnerT.entity:GetDirectionVector();
      local handlerPos = self:GetHelperPos("gun",0);

      handlerPos.x = handlerPos.x + offsDir.x*.83;
      handlerPos.y = handlerPos.y + offsDir.y*.83;
      handlerPos.z = handlerPos.z + offsDir.z*.83;
      self.gunnerT.entity:SetHandsIKTarget( handlerPos );
   end   
   
   VC.UpdateUsersAnimations(self,dt);
   
   VC.PlayMiscSounds(self,fCarSpeed,dt);
end


--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnContactClient( player )
   
   if( player==_localplayer and self.PropertiesInstance.bUsable==0 ) then return end   
   VC.OnContactClientT(self,player);
end

--////////////////////////////////////////////////////////////////////////////////////////
--////////////////////////////////////////////////////////////////////////////////////////
--// SERVER functions definitions
--////////////////////////////////////////////////////////////////////////////////////////
--////////////////////////////////////////////////////////////////////////////////////////

--////////////////////////////////////////////////////////////////////////////////////////
function Boat:InitServer()


   if( self.Properties.bHasRockets == 0) then
      self.ammoRL = 0;
--      self.Ammo["VehicleRocket"] = nil;
   end   

   VC.InitSeats(self, Boat);
   -- init common stuff for client and server
   VC.InitBoatCommon(self);
   
   self:OnReset();
   
   self:InitWeapon();   
end

-- called on the server when the player collides with the boat
--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnContactServer( player )
   
   if( self.PropertiesInstance.bUsable==0 ) then return end
   VC.OnContactServerT(self,player);

end


--////////////////////////////////////////////////////////////////////////////////////////
function Boat:UpdateServer(dt)

   VC.UpdateEnteringLeaving( self, dt );
   VC.UpdateServerCommonT( self, dt );

   if(self.cnt.inwater==1) then
      self.fGroundtime = 0;
   else   
      -- LUC eject the pilot and/or the gunner if the boat is flipping upside down
      local angles = new(self:GetAngles());
      if(angles.x > 90 and angles.x <270) then
         -- release driver
         if ( self.driverT.entity ) then
            VC.ReleaseUser( self, self.driverT );
--            VC.AIDriver( self, 1);
         end
         -- release gunner
         if ( self.gunnerT and self.gunnerT.entity ) then
            VC.ReleaseUser( self, self.gunnerT );
         end         
         -- release the passengers (..who wanna get on! deny the passengers, who wanna get on! wanna get on! they wanna get on!...)
         local idx;
         for idx=1, self.passengerLimit do
            if( self.passengersTT[idx].entity ) then
               VC.ReleaseUser( self, self.passengersTT[idx] );
            end
         end
      end
      
      self.fGroundtime = self.fGroundtime + dt;
      if(self.fGroundtime > 5.5) then
         AI:Signal(0, 1, "ON_GROUND", self.id);         
      end   
   end
   
   
   
   
end


--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnEventServer( id, params)

   if (id == ScriptEvent_PhysicalizeOnDemand) then
      self:SetPhysicParams( PHYSICPARAM_FLAGS, {flags_mask=pef_pushable_by_players, flags=0} );
   end

end



--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnShutDown()

   VC.EveryoneOutForce(self);
   VC.RemovePieces(self);
end

--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnSave(stm)
   VC.SaveAmmo( self, stm );
   stm:WriteInt(self.fEngineHealth);
end

--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnLoad(stm)
   VC.LoadAmmo( self, stm );
   self.fEngineHealth = stm:ReadInt();
end


--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnWrite( stm )
   
end

--////////////////////////////////////////////////////////////////////////////////////////
function Boat:OnRead( stm )

end

--////////////////////////////////////////////////////////////////////////////////////////

----------------------------------------------------------------------------------------------------------------------------
--
--   to test-call reinf
function Boat:Event_Reinforcment( params )

   if(VC.FreeToUse( self )==0) then return end   -- can't use it - player is in
--printf( "signaling BRING_REINFORCMENT " );   

   VC.AIDriver( self, 1 );   
   AI:Signal(0, 1, "BRING_REINFORCMENT", self.id);
   
end   


----------------------------------------------------------------------------------------------------------------------------
--
function Boat:Event_GoPath( params )

   if(VC.FreeToUse( self )==0) then return end   -- can't use it - player is in
--System:Log("\001  Humvee GoPath  ");

   self.curPathStep = self.Properties.pathstart-1;
   VC.AIDriver( self, 1 );   
   AI:Signal(0, 1, "GO_PATH", self.id);

end


----------------------------------------------------------------------------------------------------------------------------
--
-- to test
function Boat:Event_StopAttack( params )

--System:Log("\001  Event_StopAttack  ");
   self.curPathStep = self.Properties.pathstart-1;
   AI:Signal(0, 1, "PLAYER_LEFT_VEHICLE", self.id);

end



----------------------------------------------------------------------------------------------------------------------------
--
function Boat:Event_GoPatrol( params )

   if(VC.FreeToUse( self )==0) then return end   -- can't use it - player is in
   self.curPathStep = self.Properties.pathstart-1;
   VC.AIDriver( self, 1 );   
   AI:Signal(0, 1, "GO_PATROL", self.id);

end



----------------------------------------------------------------------------------------------------------------------------
--
function Boat:Event_GoAttack( params )

--System:Log("\001  Humvee GoPath  ");

   if(VC.FreeToUse( self )==0) then return end   -- can't use it - player is in

   VC.AIDriver( self, 1 );   
   AI:Signal(0, 1, "GO_ATTACK", self.id);

end

----------------------------------------------------------------------------------------------------------------------------
--
-- to test
function Boat:Event_Load( params )

--   if(VC.FreeToUse( self )==0) then return end   -- can't use it - player is in

--   VC.AIDriver( self, 1 );   
   self:LoadPeople();

end


----------------------------------------------------------------------------------------------------------------------------
--
-- to test
function Boat:Event_Release( params )

   VC.AIDriver( self, 1 );   
   self:UnloadPeople();

end

----------------------------------------------------------------------------------------------------------------------------
--
--
function Boat:RadioChatter()
end

----------------------------------------------------------------------------------------------------------------------------
--
--

----------------------------------------------------------------------------------------------------------------------------
--
--
function Boat:Event_KillTriger( params )


   if (self.driverT.entity and _localplayer) then
      if (self.driverT.entity ~= _localplayer) then
         self.cnt:SetVehicleEngineHealth(0);
         self:GotoState( "Dead" );
      end
   else
      self.cnt:SetVehicleEngineHealth(0);
      self:GotoState( "Dead" );
   end
   
--   self.fEngineHealth = 0;
--   VC.OnDamageServer(self,hit);   

end
Title:
Post by: barbosa on 04 February, 2005, 13:15:08
----------------------------------------------------------------------------------------------------------------------------
--
--
function Boat:LoadPeople()

   if(VC.FreeToUse( self )==0) then return end   -- can't use it - player is in

System:Log("boat LoadPeople  ");

   if(self.driverT.entity and self.driverT.entity.ai) then
System:Log("boat LoadPeople  +++++ DRIVER IS IN ");
      AI:Signal(0, 1, "DRIVER_IN", self.id);
   end   

   if( self.Properties.bSameGroupId == 1 ) then
      AI:Signal(SIGNALFILTER_GROUPONLY, 1, "wakeup", self.id);   
      AI:Signal(SIGNALFILTER_GROUPONLY, 1, "SHARED_ENTER_ME_VEHICLE", self.id);
   else
      AI:Signal(SIGNALFILTER_ANYONEINCOMM, 1, "wakeup", self.id);   
      AI:Signal(SIGNALFILTER_ANYONEINCOMM, 1, "SHARED_ENTER_ME_VEHICLE", self.id);
   end

   
--   AI:Signal(SIGNALFILTER_GROUPONLY, 1, "wakeup", self.id);
--   AI:Signal(SIGNALFILTER_GROUPONLY, 1, "SHARED_ENTER_ME_VEHICLE", self.id);
   self.dropState = 1;
   
end

----------------------------------------------------------------------------------------------------------------------------
--
--
function Boat:UnloadPeople()

   VC.DropPeople( self ,1);
--   VC.ReleaseGunner(self);   --, 1);
--   VC.ReleaseDriver(self);   --, 1);
   
--   self:RemoveAIGunner( );   
--   self:DriverOut( );
   
end

-------------------------------------------------------------------------------------------------------------
--
--
function Boat:InitEntering( puppet, enterTable, destPos )

   local dir = DifferenceVectors( destPos, puppet:GetPos() );
   local dist = sqrt(LengthSqVector(dir));
   local angl = self:GetAngles();
   
   ConvertVectorToCameraAngles(angl, dir);
   puppet:SetAngles( angl );

   enterTable.Time = dist/self.entVel;
   enterTable.HT = enterTable.Time*.5;
   enterTable.HK = dir.z/enterTable.Time;
   enterTable.HO = puppet:GetPos().z;
   enterTable.HS = 10/enterTable.Time;
      
   puppet:ActivatePhysics(0);

   puppet.cnt.AnimationSystemEnabled = 0;
   enterTable.TimePast = 0;
   puppet:StartAnimation(0,"jump_air");      -- to have this as previous animation
   puppet:StartAnimation(0,"jump_start");

end


-------------------------------------------------------------------------------------------------------------
--$$$do enter (puppet) refers to when enemy a1 bots are to enter the vehicles, if stated (player)it = game player$$$$$
--
function Boat:DoEnter( puppet )

   if( puppet == self.driverT.entity ) then      -- driver
      VC.AddUserT( self, self.driverT );
      VC.InitEnteringJump( self, self.driverT );
   elseif( puppet == self.gunnerT.entity ) then      -- gunner
      VC.AddUserT( self, self.gunnerT );
      VC.InitEnteringJump( self, self.gunnerT );
   elseif( puppet == self.passengerTT.entity ) then      -- passenger
      VC.AddPassengerTT( self, self.passengerTT );
      VC.InitEnteringJump( self, self.passengerTT );
        end
end

$$passeneger lines above i added also$$$
-------------------------------------------------------------------------------------------------------------
--
--
function Boat:AddDriver( puppet )

   if (self.driverT.entity ~= nil)      then   -- already have a driver
      do return 0 end
   end

   if(self.Properties.sDriverName ~= "" and self.Properties.sDriverName ~= puppet:GetName()) then return 0 end
   
   self.driverT.entity = puppet;
   if( VC.InitApproach( self, self.driverT )==0 ) then   
      self:DoEnter( puppet );
   end   
   do return 1 end   
end

-------------------------------------------------------------------------------------------------------------
--
--
function Boat:AddGunner( puppet )


   if (self.gunnerT.entity ~= nil)      then   -- already have a driver
      do return 0 end
   end

   self.gunnerT.entity = puppet;
   if( VC.InitApproach( self, self.gunnerT )==0 ) then   
      self:DoEnter( puppet );
   end   
   do return 1 end   
end

-------------------------------------------------------------------------------------------------------------
--$$$$ this added by me, a function add passenger puppet$$$$
--
function Boat:AddPassenger( puppet )


   if (self.passengerTT.entity ~= nil)      then   -- already have a driver
      do return 0 end
   end

   self.passengerTT.entity = puppet;
   if( VC.InitApproach( self, self.passengerTT )==0 ) then   
      self:DoEnter( puppet );
   end   
   do return 1 end   
end

----------------------------------------------------------------------------------------------------------------------------
--
--
function Boat:AddPassenger( player )
   return 0
end

----------------------------------------------------------------------------------------------------------------------------
--

function Boat:Event_AddPlayer( params )

   if(_localplayer.theVehicle) then return end   -- this player is already in some (this) vehicle
   
   local theTable = VC.GetAvailablePosition(self);
   
   if(theTable == nil) then return end

   _localplayer.cnt.use_pressed = nil;
   theTable.entity = _localplayer;
   VC.AddUserT(self, theTable);   
   

   
end   


--////////////////////////////////////////////////////////////////////////////////////////



----------------------------------------------------------------------------------------------------------------------------
--
-- to test
function Boat:Event_TArgetOnLand( params )

   AI:Signal(0, 1, "PLAYER_LEFT_VEHICLE", self.id);

end

----------------------------------------------------------------------------------------------------------------------------
--
-- to test
--function Boat:Event_GunnerOut( params )
--
--   AI:Signal(0, 1, "GUNNER_OUT", self.id);
--
--end


----------------------------------------------------------------------------------------------------------------------------
--
function Boat:Event_DriverIn( params )

   BroadcastEvent( self,"DriverIn" );
   
end   


------------------------------------------------------
function Boat:Event_Unhide()

   self:Hide(0);

end


------------------------------------------------------
function Boat:Event_Hide()

   self:Hide(1);

end


-----------------------------------------------------------------------------------------------------
--
--
function Boat:Event_Activate( params )

   if(self.bExploded == 1) then return end
   
   self:GotoState( "Alive" );
end


----------------------------------------------------------------------------------------------------------------------------
--
--

--------------------------------------------------------------------------------------------------------
-- empty function to get reed of script error - it's called from behavours
function Boat:MakeAlerted()
end


--------------------------------------------------------------------------------------------------------
--
function Boat:InitWeapon()

--do return end
   -- //m_MinVAngle, m_MaxVAngle, m_MinHAngle, m_MaxHAngle
   self.cnt:SetWeaponLimits(-2, 2,1,1);
   
   if( self.Properties.bUseRL == 1 ) then
      if( self.Properties.bUseRLguided == 1 ) then      
         self.cnt:SetWeaponName("VehicleMountedRocketMG", "COVERRL");      
      else
         self.cnt:SetWeaponName("VehicleMountedRocketMG", "VehicleMountedRocket");      
      end   
   else   
      self.cnt:SetWeaponName("VehicleMountedRocketMG", "VehicleMountedMG");
   end   

   VC.InitAutoWeapon( self );

   self.driverShooting = 1;
end

----------------------------------------------------------------------------------------------------------------------------
--
--this is called from vehicleProxy when all the saving is done
function Boat:OnSaveOverall(stm)

   VC.SaveCommon( self, stm );
   
end

----------------------------------------------------------------------------------------------------------------------------
--
--this is called from vehicleProxy when all the loading is done and all the entities are spawn
function Boat:OnLoadOverall(stm)

   VC.LoadCommon( self, stm );
   
end

--   ------------------------------------------------------------------------------------------------------------



Ok thats the whole script. Obviously a lot pertains to damage models and such  Note*  A file with the extension .cfg is just a format of game model used.  And .cga is just a format of character animation file. Also a lot of particle effects and stuff.    I never added passenger out lines, as i cant even get a bot passenger  to sit in with the other 2 bots yet! :  D  I understand by reading previous threads that this is more just predefined calls within the game, so if anyone has Any ideas or help greatly appreciated
Title:
Post by: QuikThinker on 04 February, 2005, 14:56:13
LMFAO :D
Title:
Post by: barbosa on 04 February, 2005, 15:15:32
I take it no hope then :)