示例#1
0
        private void ReloadTrackDefinition(string trackId = null)
        {
            if (trackId == null)
            {
                trackId = CurrentTrackDefinition?.TrackName;
            }

            if (trackId != null)
            {
                CurrentTrackDefinition = MRBackend.GetTrackDefinition(trackId);
                CreatePitExitRectangle();
                PluginManager.Log($"Pit exit rectangle created: {PitExitRectangle}");
                PluginManager.Log($"Track Lines parsed: {CurrentTrackDefinition?.Lines?.Length ?? 0}");
            }
        }
示例#2
0
        protected override void OnChatMessage(MsgChat msg)
        {
            if (!msg.IsCommand)
            {
                return;
            }

            var split = msg.Message.Split(' ');

            if (split.Length > 0)
            {
                switch (split[0].ToLower())
                {
                case "/mr":
                case "/minorating":
                {
                    if (split.Length == 1)         // only /mr
                    {
                        MRBackend.RequestDriverRatingAsync(msg.CarId);
                    }
                    else
                    {
                        MRBackend.RequestMRCommandAdminInfoAsync(msg.CarId, PluginManager.GetDriverInfo(msg.CarId).IsAdmin, split);
                    }
                }
                break;

                case "/mrpoint":
                {
                    string     text;
                    DriverInfo driver = null;
                    if (!PluginManager.TryGetDriverInfo(Convert.ToByte(msg.CarId), out driver))
                    {
                        text = "Driver not found: " + msg.CarId;
                    }
                    else if (driver?.LastCarUpdate?.Value == null)
                    {
                        text = "Something's wrong";
                    }
                    else
                    {
                        var upd = driver?.LastCarUpdate?.Value;

                        text = $"Spl:{upd.NormalizedSplinePosition:F5}|X={upd.WorldPosition.X:F5}|Z={upd.WorldPosition.Z:F5}";
                    }

                    PluginManager.SendChatMessage(msg.CarId, text);
                }
                break;

                case "/mrinfo":
                {
                    PluginManager.SendChatMessage(msg.CarId, $"Track id: {CurrentTrackDefinition?.TrackName}, length ={CurrentTrackDefinition?.Length:N0}");
                    PluginManager.SendChatMessage(msg.CarId, $"Pit exit: {PitExitRectangle?.X}");
                }
                break;

                case "/mrtrackreload":
                {
                    CurrentTrackDefinition = MRBackend.GetTrackDefinition(CurrentTrackDefinition.TrackName);
                    CreatePitExitRectangle();
                    PluginManager.SendChatMessage(msg.CarId, $"Track reloaded");
                }
                break;

                case "/mrtl1":
                {
                    string     text;
                    DriverInfo driver = null;
                    if (!PluginManager.TryGetDriverInfo(Convert.ToByte(msg.CarId), out driver))
                    {
                        text = "Driver not found: " + msg.CarId;
                    }
                    else if (driver?.LastCarUpdate?.Value == null)
                    {
                        text = "Something's wrong";
                    }
                    else
                    {
                        _AdminAddTrackLineStart = driver?.LastCarUpdate?.Value;
                        text = $"Start set: {_AdminAddTrackLineStart}";
                    }

                    PluginManager.SendChatMessage(msg.CarId, text);
                }
                break;

                case "/mrtl2":
                {
                    Console.WriteLine("TrackLine 2");
                    string     text   = null;
                    int        type   = 2; // pit exit = 1, default is line = 2
                    DriverInfo driver = null;
                    if (_AdminAddTrackLineStart == null)
                    {
                        text = "No start set";
                    }
                    else if (!PluginManager.TryGetDriverInfo(Convert.ToByte(msg.CarId), out driver))
                    {
                        text = "Driver not found: " + msg.CarId;
                    }
                    else if (driver?.LastCarUpdate?.Value == null)
                    {
                        text = "Something's wrong";
                    }
                    else if (split.Length < 2 || string.IsNullOrEmpty(split[1]))
                    {
                        text = "No hint set";
                    }
                    else
                    {
                        if (split.Length == 3)
                        {
                            type = int.Parse(split[2]);
                        }

                        try
                        {
                            var startPoint = _AdminAddTrackLineStart;
                            var endPoint   = driver?.LastCarUpdate?.Value;
                            MRBackend.CreateTrackLine(msg.CarId,
                                                      startPoint.NormalizedSplinePosition,
                                                      endPoint.NormalizedSplinePosition,
                                                      startPoint.WorldPosition.X,
                                                      startPoint.WorldPosition.Z,
                                                      endPoint.WorldPosition.X,
                                                      endPoint.WorldPosition.Z,
                                                      split[1],
                                                      type);
                            Console.WriteLine($"Message sent, type {type}");
                            ReloadTrackDefinition();
                            PluginManager.SendChatMessage(msg.CarId, "Track reloaded");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Exception in TrackLine2: {ex.ToString()}");
                        }
                    }

                    if (!string.IsNullOrEmpty(text))
                    {
                        PluginManager.SendChatMessage(msg.CarId, text);
                    }
                }
                break;

                default:
                    break;
                }
            }
        }