protected virtual string CreateWelcomeMessage(DriverInfo driverReport)
 {
     if (!string.IsNullOrWhiteSpace(this.WelcomeMessage))
     {
         return this.WelcomeMessage.Replace("$DriverName$", driverReport.DriverName).Replace("$ServerName$", this.PluginManager.CurrentSession.ServerName);
     }
     return null;
 }
Exemple #2
0
 /// <summary>
 /// Computes the distance to the closest opponent.
 /// </summary>
 /// <param name="driver">The driver.</param>
 /// <param name="opponent">The closest opponent.</param>
 /// <returns>The distance in meters.</returns>
 public float GetDistanceToClosestOpponent(DriverInfo driver, out DriverInfo opponent)
 {
     opponent = this.Drivers.Where(d => d != driver &&
                                   Math.Abs(d.LastPositionUpdate - driver.LastPositionUpdate) < 2 * RealtimeUpdateInterval)
                .OrderBy(d => (d.LastPosition - driver.LastPosition).Length()).FirstOrDefault();
     if (opponent != null)
     {
         return((opponent.LastPosition - driver.LastPosition).Length());
     }
     else
     {
         return(float.MaxValue);
     }
 }
Exemple #3
0
 protected internal virtual void OnCarUpdate(DriverInfo driverInfo)
 {
 }
Exemple #4
0
        protected override void OnCarUpdate(DriverInfo di)
        {
            if (!_distancesToReport.ContainsKey(di))
                _distancesToReport.Add(di, new MRDistanceHelper());

            var dh = _distancesToReport[di];
            // Generally, the meters driven are stored
            dh.MetersDriven += di.LastDistanceTraveled;

            // To protect this from some simple 1st gear driving together in combat range to grind stuff, we'll only allow Attack & Combat range
            // recording if there is acceleration. 3 or 5 are quite little values, even for slow cars like the GT86
            if (Math.Abs(di.CurrentAcceleration) > 2.0f && di.CurrentDistanceToClosestCar != 0)
            {
                // Then we'll check this interval (we're talking about a second or similar)
                // for driving in attack range (let's say.. inside 20m) or even combating (maybe 8m)
                if (di.CurrentDistanceToClosestCar < 8)
                    dh.MetersCombatRange += di.LastDistanceTraveled;
                else if (di.CurrentDistanceToClosestCar < 20)
                    dh.MetersAttackRange += di.LastDistanceTraveled;
            }
        }
Exemple #5
0
        private void SendDistance(DriverInfo di, bool forced = false)
        {
            if (!_distancesToReport.ContainsKey(di))
                _distancesToReport.Add(di, new MRDistanceHelper());

            var distanceCached = _distancesToReport[di];
            // Then we'll do it in different resolutions; the first meters are more important than the later ones
            if (di.Distance > REGULAR_DISTANCE && distanceCached.MetersDriven > 2000 || forced) // After 2km, we'll just report in big chunks - or if forced
            {
                PluginManager.Log(DateTime.Now.TimeOfDay.ToString() + "- Send DistanceDriven: " + di.CarId + ": " + distanceCached.MetersDriven);
                HandleClientActions(LiveDataServer.DistanceDriven(CurrentSessionGuid, di.CarId, distanceCached));
                _distancesToReport[di] = new MRDistanceHelper();
            }
            else if (di.Distance < REGULAR_DISTANCE && distanceCached.MetersDriven > 200) // 200m is about "left pits", so we'll report this until
            {
                PluginManager.Log(DateTime.Now.TimeOfDay.ToString() + "- Send DistanceDriven: " + di.CarId + ": " + distanceCached.MetersDriven);
                HandleClientActions(LiveDataServer.DistanceDriven(CurrentSessionGuid, di.CarId, distanceCached));
                _distancesToReport[di] = new MRDistanceHelper();
            }
        }