コード例 #1
0
        public void ServerCmdcarUnmountObj(coGameConnection client, coPlayer obj)
            {
            obj.unmount();
            obj.setControlObject(obj);

            TransformF ejectpos = obj.getTransform();
            ejectpos += new TransformF(0, 0, 5);
            obj.setTransform(ejectpos);

            coVehicle mvehicle = obj["mVehicle"];

            Point3F ejectvel = mvehicle.getVelocity();
            ejectvel += new Point3F(0, 0, 10);

            ejectvel = ejectvel.vectorScale(((coSimDataBlock) (obj.getDataBlock()))["mass"].AsFloat());

            obj.applyImpulse(ejectpos.MPosition, ejectvel);
            }
コード例 #2
0
        public void ArmorDoDismount(string datablock, string player, string sforced)
            {
            bool forced = sforced.AsBool();

            string vehicle = console.GetVarString(string.Format("{0}.mVehicle", player));
            if ((!SceneObject.isMounted(player)) || (!console.isObject(vehicle)))
                return;

            Point3F vvel = ShapeBase.getVelocity(vehicle);
            string vdb = console.getDatablock(vehicle).ToString(CultureInfo.InvariantCulture);
            int maxDismountSpeed = console.GetVarInt(string.Format("{0}.maxDismountSpeed", vdb));
            if ((vvel.len() <= maxDismountSpeed) || (forced))
                {
                TransformF pos = SceneObject.getTransform(player);
                TransformF rot = pos;
                TransformF oldpos = pos.copy();

                List<Point3F> vecs = new List<Point3F>();
                vecs.Add(new Point3F(-1, 0, 0));
                vecs.Add(new Point3F(0, 0, 1));
                vecs.Add(new Point3F(0, 0, -1));
                vecs.Add(new Point3F(1, 0, 0));
                vecs.Add(new Point3F(0, -1, 0));
                vecs.Add(new Point3F(0, 0, 0));

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


                TransformF r = math.MatrixMulVector(SceneObject.getTransform(player), 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(player, oldpos.MPosition, pos.MPosition))
                        continue;
                    success = i;
                    impulsevec = vecs[i].copy();
                    break;
                    }
                if ((forced) && (success == -1))
                    pos = oldpos.copy();

                console.SetVar(string.Format("{0}.mountVehicle", player), false);

                SimObject.schedule(player, "4000", "mountVehicles", "true");
                SceneObject.unmount(player);
                SceneObject.setTransform(player, 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(console.GetVarFloat(console.getDatablock(player) + ".mass"));
                velo.z = 1;

                ShapeBase.applyImpulse(player, pos.MPosition, velo);

                Point3F vel = ShapeBase.getVelocity(player);
                float vec = Point3F.vectorDot(vel, vel.normalizeSafe());
                if (vec > 50)
                    {
                    float scale = 50/vec;
                    ShapeBase.setVelocity(player, vel.vectorScale(scale));
                    }
                }
            else
                {
                MessageClient(console.GetVarString(player + ".client"), "msgUnmount", @"\c2Cannot exit %1 while moving.", console.GetVarString(vdb + ".nameTag"));
                }
            }
コード例 #3
0
        public void ServerCmdcarUnmountObj(string client, string obj)
            {
            SceneObject.unmount(obj);
            Player.setControlObject(obj, obj);

            TransformF ejectpos = SceneObject.getTransform(obj);
            ejectpos += new TransformF(0, 0, 5);
            SceneObject.setTransform(obj, ejectpos);

            string mvehicle = console.GetVarString(string.Format("{0}.mVehicle", obj));

            Point3F ejectvel = ShapeBase.getVelocity(mvehicle);
            ejectvel += new Point3F(0, 0, 10);

            ejectvel = ejectvel.vectorScale((console.GetVarString(string.Format("{0}.mass", console.getDatablock(obj)))).AsFloat());
            ShapeBase.applyImpulse(obj, ejectpos.MPosition, ejectvel);
            }
コード例 #4
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"));
                }
            }