public void VehicleDataOnAdd(coVehicleData thisobj, coVehicle obj)
        {
            obj.setRechargeRate(thisobj["rechargeRate"].AsFloat());
            obj.setEnergyLevel(thisobj["MaxEnergy"].AsFloat());
            obj.setRepairRate(0);

            {
                if (obj["mountable"].AsBool() || (obj["mountable"] == ""))
                {
                    VehicleDataIsMountable(thisobj, obj, true);
                }
                else
                {
                    VehicleDataIsMountable(thisobj, obj, false);
                }
            }


            string nametag = thisobj["nameTag"];


            if (nametag.Trim() != "")
            {
                obj.setShapeName(nametag);
            }
        }
 public void VehicleDataMountPlayer(coVehicleData thisobj, coVehicle vehicle, coPlayer player)
 {
     if (!vehicle.isObject() || vehicle.getDamageState() == "Destroyed")
     {
         return;
     }
     player.startFade(1000, 0, true);
     thisobj.schedule("1000", "setMountVehicle", vehicle, player);
     player.schedule("1500", "startFade", "1000", "0", "false");
 }
 public int VehicleDataFindEmptySeat(coVehicleData thisobj, coVehicle vehicle, coPlayer player)
 {
     for (int i = 0; i < thisobj["numMountPoints"].AsInt(); i++)
     {
         int node = vehicle.getMountNodeObject(i);
         if (node != 0)
         {
             return(i);
         }
     }
     return(-1);
 }
 public void VehicleDataOnRemove(coVehicleData thisobj, coVehicle obj)
 {
     // if there are passengers/driver, kick them out
     for (int i = 0; i < ((coVehicleData)obj.getDataBlock())["numMountPoints"].AsInt(); i++)
     {
         coPlayer passenger = obj.getMountNodeObject(i);
         if (passenger != "0")
         {
             passenger.call("doDismount", true.AsString());
         }
     }
 }
 public int VehicleDataSwitchSeats(coVehicleData thisobj, coVehicle vehicle, coPlayer player)
 {
     for (int i = 0; i < thisobj["numMountPoints"].AsInt(); i++)
     {
         int node = vehicle.getMountNodeObject(i);
         if (node == player || node > 0)
         {
             continue;
         }
         if (node == 0)
         {
             return(i);
         }
     }
     return(-1);
 }
        public void VehicleDataSetMountVehicle(coVehicleData thisobj, coVehicle vehicle, coPlayer player)
        {
            if (!vehicle.isObject() || vehicle.getDamageState() == "Destroyed")
            {
                return;
            }

            int node = VehicleDataFindEmptySeat(thisobj, vehicle, player);

            if (node == -1)
            {
                return;
            }
            vehicle.mountObject(player, node, new TransformF(true));
            player["mVehicle"] = vehicle;
        }
Exemple #7
0
        public void ArmorOnCollision(coPlayerData datablock, coPlayer player, coShapeBase col)
        {
            if (player.getState() == "Dead")
            {
                return;
            }
            // Try and pickup all items
            if (col.getClassName() == "Item")
            {
                player.call("pickup", col);
                return;
            }
            //AI are not allowed to drive they are lousey drivers....
            coGameConnection client = player["client"];

            if (!client.isObject())
            {
                return;
            }
            //Mount Vehicle.
            if ((console.getTypeMask(col) & (UInt32)SceneObjectTypesAsUint.GameBaseObjectType) != (UInt32)SceneObjectTypesAsUint.GameBaseObjectType)
            {
                return;
            }
            coVehicleData db = col.getDataBlock();

            if (((db.getClassName() == "WheeledVehicleData") || player["mountVehicle"].AsBool() || player.getState() == "Move" || col["mountable"].AsBool()))
            {
                return;
            }
            // Only mount drivers for now.
            ((coGameConnection)player["client"]).setFirstPerson(false);
            // For this specific example, only one person can fit
            // into a vehicle
            int mount = col.getMountNodeObject(0);

            if (mount > 0)
            {
                return;
            }
            // For this specific FPS Example, always mount the player to node 0
            col.mountObject(player, 0, new TransformF(true));
            player["mVehicle"] = col;
        }
Exemple #8
0
        public void ArmorOnMount(coPlayerData datablock, coPlayer player, coVehicle vehicle, int node)
        {
            coVehicleData vehicleDataBlock = vehicle.getDataBlock();

            if (node == 0)
            {
                player.setTransform(new TransformF("0 0 0 0 0 1 0"));


                string mountPose = vehicleDataBlock["mountPose[" + node + "]"];
                player.setActionThread(mountPose, true, true);

                player["lastWeapon"] = player.getMountedImage(WeaponSlot).AsString();


                coGameConnection client = player["client"];
                if (client.isObject())
                {
                    player["lastperson"] = client.isFirstPerson().AsString();
                }

                player.unmountImage(WeaponSlot);


                player.setControlObject(vehicle);

                if (player.getClassName() == "Player")
                {
                    console.commandToClient(player["client"], console.addTaggedString("toggleVehicleMap"), new[] { "true" });
                }
            }
            else
            {
                string pose = vehicleDataBlock["mountPose[" + node + "]"];
                player.setActionThread(pose != "" ? pose : "root", false, true);
            }
        }
Exemple #9
0
        public void ArmorDoDismount(coPlayerData datablock, coPlayer player, bool forced)
        {
            coVehicle vehicle = player["mVehicle"];

            if (!vehicle.isObject())
            {
                return;
            }
            if (!player.isMounted())
            {
                return;
            }


            Point3F       vvel             = vehicle.getVelocity();
            coVehicleData vdb              = vehicle.getDataBlock();
            int           maxDismountSpeed = vdb["maxDismountSpeed"].AsInt();

            if ((vvel.len() <= maxDismountSpeed) || (forced))
            {
                TransformF pos    = player.getTransform();
                TransformF rot    = pos;
                TransformF oldpos = pos.copy();

                List <Point3F> vecs = new List <Point3F> {
                    new Point3F(-1, 0, 0), new Point3F(0, 0, 1), new Point3F(0, 0, -1), new Point3F(1, 0, 0), new Point3F(0, -1, 0), new Point3F(0, 0, 0)
                };

                Point3F impulsevec = new Point3F(0, 0, 0);


                TransformF r = math.MatrixMulVector(player.getTransform(), vecs[0]);

                vecs[0]         = r.MPosition;
                pos.MPosition.x = 0;
                pos.MPosition.y = 0;
                pos.MPosition.z = 0;

                const int numofAttempts = 5;
                int       success       = -1;

                for (int i = 0; i < numofAttempts; i++)
                {
                    Point3F vectorscale = vecs[i].vectorScale(3);

                    pos = oldpos + new TransformF(vectorscale);
                    if (!player.checkDismountPoint(oldpos.MPosition, pos.MPosition))
                    {
                        continue;
                    }
                    success    = i;
                    impulsevec = vecs[i].copy();
                    break;
                }
                if ((forced) && (success == -1))
                {
                    pos = oldpos.copy();
                }

                player["mountVehicle"] = false.AsString();
                player.schedule("4000", "mountVehicles", "true");
                player.unmount();
                player.setTransform(new TransformF(pos.MPosition.x, pos.MPosition.y, pos.MPosition.z, rot.MOrientation.x, rot.MOrientation.y, rot.MOrientation.z, rot.MAngle));


                Point3F velo = impulsevec.vectorScale(player["mass"].AsFloat());
                velo.z = 1;

                player.applyImpulse(pos.MPosition, velo);


                Point3F vel = player.getVelocity();
                float   vec = Point3F.vectorDot(vel, vel.normalizeSafe());
                if (vec > 50)
                {
                    float scale = 50 / vec;
                    player.setVelocity(vel.vectorScale(scale));
                }
            }
            else
            {
                MessageClient(player["client"], "msgUnmount", @"\c2Cannot exit %1 while moving.", console.GetVarString(vdb + ".nameTag"));
            }
        }
 public void VehicleDataIsMountable(coVehicleData thisobj, coVehicle obj, bool val)
 {
     obj["mountable"] = val.AsString();
 }