Ejemplo n.º 1
0
        public Race(Race copyFrom)
        {
            Checkpoints = copyFrom.Checkpoints;
            SpawnPoints = copyFrom.SpawnPoints;
            AvailableVehicles = copyFrom.AvailableVehicles;
            LapsAvailable = copyFrom.LapsAvailable;
            Trigger = copyFrom.Trigger;

            Name = copyFrom.Name;
            Description = copyFrom.Description;
        }
Ejemplo n.º 2
0
        private void SetUpPlayerForRace(Client client, Race race, bool freeze, int spawnpoint)
        {
            if (race == null) return;

            var selectedModel = unchecked((int)((uint)race.AvailableVehicles[randGen.Next(race.AvailableVehicles.Length)]));
            var position = race.SpawnPoints[spawnpoint % race.SpawnPoints.Length].Position;
            var heading = race.SpawnPoints[spawnpoint % race.SpawnPoints.Length].Heading;
            Program.ServerInstance.SendNativeCallToPlayer(client, 0x06843DA7060A026B, new LocalPlayerArgument(),
                position.X, position.Y, position.Z, 0, 0, 0, 1);
            
            if (race.Checkpoints.Length >= 2)
            {
                Vector3 dir = race.Checkpoints[1].Subtract(race.Checkpoints[0]);
                dir = dir.Normalize();

                Program.ServerInstance.SetNativeCallOnTickForPlayer(client, "RACE_CHECKPOINT_MARKER_DIR",
                0x28477EC23D892089, 20, race.Checkpoints[0].Subtract(new Vector3() { X = 0f, Y = 0f, Z = -2f }), dir, new Vector3() { X = 60f, Y = 0f, Z = 0f },
                new Vector3() { X = 4f, Y = 4f, Z = 4f }, 87, 193, 250, 200, false, false, 2, false, false,
                false, false);
            }


            Program.ServerInstance.SetNativeCallOnTickForPlayer(client, "RACE_CHECKPOINT_MARKER",
                0x28477EC23D892089, 1, race.Checkpoints[0], new Vector3(), new Vector3(),
                new Vector3() { X = 10f, Y = 10f, Z = 2f }, 241, 247, 57, 180, false, false, 2, false, false,
                false, false);


            var nt = new Thread((ThreadStart)delegate
            {
                SetPlayerInVehicle(client, selectedModel, position, heading, freeze);
            });
            nt.Start();

            Opponent curOp = Opponents.FirstOrDefault(op => op.Client == client);
            if (curOp == null || curOp.Blip == 0)
            {
                Program.ServerInstance.GetNativeCallFromPlayer(client, "start_blip", 0x5A039BB0BCA604B6,
                    new IntArgument(), // ADD_BLIP_FOR_COORD
                    delegate (object o)
                    {
                        lock (Opponents)
                        {
                            Opponent secOp = Opponents.FirstOrDefault(op => op.Client == client);

                            if (secOp != null)
                            {
                                secOp.Blip = (int)o;
                            }
                            else
                                Opponents.Add(new Opponent(client) { Blip = (int)o });
                        }
                    }, race.Checkpoints[0].X, race.Checkpoints[0].Y, race.Checkpoints[0].Z);
            }
            else
            {
                Program.ServerInstance.SendNativeCallToPlayer(client, 0x45FF974EEE1C8734, curOp.Blip, 255);
                Program.ServerInstance.SendNativeCallToPlayer(client, 0xAE2AF67E9D9AF65D, curOp.Blip, race.Checkpoints[0].X, race.Checkpoints[0].Y, race.Checkpoints[0].Z);
            }
        }
Ejemplo n.º 3
0
        private void StartRace(Race race)
        {
            race = new Race(race);
            //Game.FadeScreenOut(500);

            CurrentRace = race;

            /*if (_raceSettings["Laps"] > 1)
            {
                _totalLaps = race.Checkpoints.Length;
                List<Vector3> tmpCheckpoints = new List<Vector3>();
                for (int i = 0; i < _raceSettings["Laps"]; i++)
                {
                    tmpCheckpoints.AddRange(race.Checkpoints);
                }
                _currentRace.Checkpoints = tmpCheckpoints.ToArray();
            }*/

            Opponents.ForEach(op =>
            {
                op.HasFinished = false;
                op.CheckpointsPassed = 0;
            });
            
            
            lock (Program.ServerInstance.Clients)
                for (int i = 0; i < Program.ServerInstance.Clients.Count; i++)
                {
                    SetUpPlayerForRace(Program.ServerInstance.Clients[i], CurrentRace, true, i);
                }

            CurrentRaceCheckpoints = race.Checkpoints.ToList();
            RaceStart = DateTime.UtcNow;
            
            Console.WriteLine("RACE: Starting race " + race.Name);

            var t = new Thread((ThreadStart) delegate
            {
                Thread.Sleep(10000);
                Program.ServerInstance.SendNotificationToAll("3"); // I should probably automate this
                Thread.Sleep(1000);
                Program.ServerInstance.SendNotificationToAll("2");
                Thread.Sleep(1000);
                Program.ServerInstance.SendNotificationToAll("1");
                Thread.Sleep(1000);
                Program.ServerInstance.SendNotificationToAll("Go!");
                IsRaceOngoing = true;


                lock (Opponents)
                foreach (var opponent in Opponents)
                {
                    Program.ServerInstance.SendNativeCallToPlayer(opponent.Client, 0x428CA6DBD1094446, opponent.Vehicle, false);
                    opponent.HasStarted = true;
                }
            });
            t.Start();
        }
Ejemplo n.º 4
0
        private void SetUpPlayerForRace(Client client, Race race, bool freeze, int spawnpoint)
        {
            if (race == null)
            {
                return;
            }

            var selectedModel = unchecked ((int)((uint)race.AvailableVehicles[randGen.Next(race.AvailableVehicles.Length)]));
            var position      = race.SpawnPoints[spawnpoint % race.SpawnPoints.Length].Position;
            var heading       = race.SpawnPoints[spawnpoint % race.SpawnPoints.Length].Heading;

            ServerInstance.SendNativeCallToPlayer(client, 0x06843DA7060A026B, new LocalPlayerArgument(),
                                                  position.X, position.Y, position.Z, 0, 0, 0, 1);

            if (race.Checkpoints.Length >= 2)
            {
                Vector3 dir = race.Checkpoints[1].Subtract(race.Checkpoints[0]);
                dir = dir.Normalize();

                ServerInstance.SetNativeCallOnTickForPlayer(client, "RACE_CHECKPOINT_MARKER_DIR",
                                                            0x28477EC23D892089, 20, race.Checkpoints[0].Subtract(new Vector3()
                {
                    X = 0f, Y = 0f, Z = -2f
                }), dir, new Vector3()
                {
                    X = 60f, Y = 0f, Z = 0f
                },
                                                            new Vector3()
                {
                    X = 4f, Y = 4f, Z = 4f
                }, 87, 193, 250, 200, false, false, 2, false, false,
                                                            false, false);
            }


            ServerInstance.SetNativeCallOnTickForPlayer(client, "RACE_CHECKPOINT_MARKER",
                                                        0x28477EC23D892089, 1, race.Checkpoints[0], new Vector3(), new Vector3(),
                                                        new Vector3()
            {
                X = 10f, Y = 10f, Z = 2f
            }, 241, 247, 57, 180, false, false, 2, false, false,
                                                        false, false);


            var nt = new Thread((ThreadStart) delegate
            {
                SetPlayerInVehicle(client, selectedModel, position, heading, freeze);
            });

            nt.Start();

            Opponent curOp = Opponents.FirstOrDefault(op => op.Client == client);

            if (curOp == null || curOp.Blip == 0)
            {
                ServerInstance.GetNativeCallFromPlayer(client, "start_blip", 0x5A039BB0BCA604B6,
                                                       new IntArgument(), // ADD_BLIP_FOR_COORD
                                                       delegate(object o)
                {
                    lock (Opponents)
                    {
                        Opponent secOp = Opponents.FirstOrDefault(op => op.Client == client);

                        if (secOp != null)
                        {
                            secOp.Blip = (int)o;
                        }
                        else
                        {
                            Opponents.Add(new Opponent(client)
                            {
                                Blip = (int)o
                            });
                        }
                    }
                }, race.Checkpoints[0].X, race.Checkpoints[0].Y, race.Checkpoints[0].Z);
            }
            else
            {
                ServerInstance.SendNativeCallToPlayer(client, 0x45FF974EEE1C8734, curOp.Blip, 255);
                ServerInstance.SendNativeCallToPlayer(client, 0xAE2AF67E9D9AF65D, curOp.Blip, race.Checkpoints[0].X, race.Checkpoints[0].Y, race.Checkpoints[0].Z);
            }
        }
Ejemplo n.º 5
0
        static void Main()
        {
            try
            {
                Race.Race ImSpeed = new Race.Race("Air")
                {
                    RaceDistance = 1000
                };
                ImSpeed.AddPlayer(new Broom());
                ImSpeed.AddPlayer(new MagicCarpet());
                ImSpeed.AddPlayer(new Mortar());
                Console.WriteLine($"Winner: {ImSpeed.StartRace()}s.");
            }
            catch (StartRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (CreateRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }

            try
            {
                Race.Race McQueen = new Race.Race("Ground")
                {
                    RaceDistance = 2000
                };
                McQueen.AddPlayer(new TwoHumpedCamel());
                McQueen.AddPlayer(new Centaur());
                McQueen.AddPlayer(new BootsOfTravel());
                Console.WriteLine($"Winner: {McQueen.StartRace()}s.");
            }
            catch (StartRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (CreateRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }

            try
            {
                Race.Race multiple = new Race.Race("AllTypes")
                {
                    RaceDistance = 120
                };
                multiple.AddPlayer(new TwoHumpedCamel());
                multiple.AddPlayer(new Broom());
                multiple.AddPlayer(new BootsOfTravel());
                multiple.AddPlayer(new Mortar());
                Console.WriteLine($"Winner: {multiple.StartRace()}s.");
            }
            catch (StartRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (CreateRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }

            try
            {
                Race.Race last = new Race.Race("Air")
                {
                    RaceDistance = 120
                };
                last.AddPlayer(new TwoHumpedCamel());
                last.AddPlayer(new Broom());
                last.AddPlayer(new BootsOfTravel());
                last.AddPlayer(new Mortar());
                Console.WriteLine($"Winner: {last.StartRace()}s.");
            }
            catch (StartRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (CreateRaceException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }