// Token: 0x06001954 RID: 6484 RVA: 0x0002DAB8 File Offset: 0x0002CAB8
        public EventResult Arbitrated(Event evnt, XmlString xmlString)
        {
            InstancedEvent   instancedEvent = evnt as InstancedEvent;
            RouteEventResult routeEventResult;

            if (XSD2CPP.ReadRouteEventResult(xmlString, out routeEventResult) && routeEventResult.EventSessionId == instancedEvent.EventSessionId)
            {
                foreach (RouteEntrantResult routeEntrantResult in routeEventResult.Entrants)
                {
                    EntrantInfo entrantInfo = evnt.FindEntrant(routeEntrantResult.PersonaId);
                    if (entrantInfo != null)
                    {
                        RouteScoringState routeScoringState = entrantInfo.ScoringState as RouteScoringState;
                        if (routeScoringState != null && !routeScoringState.HasArbitrated)
                        {
                            routeScoringState.HasArbitrated = true;
                            routeScoringState.FinishReason  = (FinishReason)routeEntrantResult.FinishReason;
                            routeScoringState.EventDurationInMilliseconds = routeEntrantResult.EventDurationInMilliseconds;
                            routeScoringState.Rank     = routeEntrantResult.Ranking;
                            routeScoringState.TopSpeed = routeEntrantResult.TopSpeed;
                            routeScoringState.BestLapDurationInMilliseconds = routeEntrantResult.BestLapDurationInMilliseconds;
                        }
                    }
                }
                Marshal.Get().SetLocalPlayersDurability(routeEventResult.Durability);
                return(routeEventResult);
            }
            return(null);
        }
        // Token: 0x06001947 RID: 6471 RVA: 0x0002D328 File Offset: 0x0002C328
        public void Fill(ArbitratedPacket arbitratedPacket, EntrantInfo entrant)
        {
            RouteArbitratedPacket routeArbitratedPacket = arbitratedPacket as RouteArbitratedPacket;
            RouteScoringState     routeScoringState     = entrant.ScoringState as RouteScoringState;

            if (routeScoringState != null && null != routeArbitratedPacket)
            {
                RouteEntrantArbitratedPacket routeEntrantArbitratedPacket = routeArbitratedPacket.CreateEntrantArbitratedPacket();
                Marshal.Get().FillFEPlayerPersona(entrant.PersonaId, routeEntrantArbitratedPacket);
                routeEntrantArbitratedPacket.PersonaId = entrant.PersonaId;
                routeEntrantArbitratedPacket.SetPersonaName(entrant.Opponent.OpponentName);
                routeEntrantArbitratedPacket.SetMotto(entrant.Opponent.Motto);
                routeEntrantArbitratedPacket.HasArbitrated = routeScoringState.HasArbitrated;
                routeEntrantArbitratedPacket.FinishReason  = routeScoringState.FinishReason;
                routeEntrantArbitratedPacket.Rank          = routeScoringState.Rank;
                routeEntrantArbitratedPacket.Level         = routeScoringState.Level;
                routeEntrantArbitratedPacket.IconIndex     = (long)((ulong)entrant.Opponent.IconIndex);
                routeEntrantArbitratedPacket.IsLocal       = (entrant.Opponent is LocalHumanOpponent);
                routeEntrantArbitratedPacket.EventDuration = routeScoringState.EventDurationInSeconds;
                Powerups.FillEntrantArbitratedPacket(routeEntrantArbitratedPacket);
                entrant.Opponent.FillCarData(routeEntrantArbitratedPacket.GetCarData());
                routeEntrantArbitratedPacket.BestLapDuration = routeScoringState.BestLapDurationInSeconds;
                routeEntrantArbitratedPacket.TopSpeed        = routeScoringState.TopSpeed;
            }
        }
        // Token: 0x0600194B RID: 6475 RVA: 0x0002D4C4 File Offset: 0x0002C4C4
        public virtual void OnUpdate(EntrantInfo entrant, Event evnt, float dt)
        {
            InstancedEvent    instancedEvent    = evnt as InstancedEvent;
            RouteScoringState routeScoringState = entrant.ScoringState as RouteScoringState;

            if (routeScoringState != null)
            {
                routeScoringState.FractionCompleted   = this.GetFractionCompleted(routeScoringState, entrant, instancedEvent);
                routeScoringState.DistanceToStartLine = instancedEvent.GetDistanceToStartLine(entrant.Opponent.Vehicle);
                float speed = entrant.Opponent.Vehicle.GetSpeed();
                if (speed > routeScoringState.TopSpeed)
                {
                    routeScoringState.TopSpeed = speed;
                }
                if (entrant.Opponent.Vehicle.GetCurrentAirborneTime() > routeScoringState.LongestAirTimeInSeconds)
                {
                    routeScoringState.LongestAirTimeInSeconds = entrant.Opponent.Vehicle.GetCurrentAirborneTime();
                }
                if (entrant.Opponent.Vehicle.GetNumWheelsOnGround() == 0)
                {
                    routeScoringState.SumAirTimeInSeconds += dt;
                }
                if (entrant.Opponent.InternalOpponent.GetNumOpponentsCollidedWith() > routeScoringState.NumOpponentsTagged)
                {
                    routeScoringState.NumOpponentsTagged = entrant.Opponent.InternalOpponent.GetNumOpponentsCollidedWith();
                }
                entrant.Opponent.InternalOpponent.SetFractionEventComplete(routeScoringState.FractionCompleted);
            }
        }
        // Token: 0x0600194E RID: 6478 RVA: 0x0002D6F0 File Offset: 0x0002C6F0
        protected virtual float GetFractionLapCompleted(RouteScoringState state, EntrantInfo entrant, InstancedEvent evnt)
        {
            float num       = evnt.TrackLayout.GetLapStartToVehicleDistance(entrant.Opponent.Vehicle);
            float lapLength = evnt.TrackLayout.GetLapLength(state.CurrentLap);

            num = Math.Max(num, 0f);
            return(Math.Min(num / lapLength, 1f));
        }
        // Token: 0x060018D4 RID: 6356 RVA: 0x0002C6FC File Offset: 0x0002B6FC
        public bool IsPowerupRestricted(Restriction restriction, EntrantInfo entrantInfo, Event evnt)
        {
            if (entrantInfo == null)
            {
                return(true);
            }
            LocalHumanOpponent localHumanOpponent = entrantInfo.Opponent as LocalHumanOpponent;
            DragScoringState   dragScoringState   = entrantInfo.ScoringState as DragScoringState;

            if (dragScoringState == null)
            {
                return(true);
            }
            if (dragScoringState.EventDurationInSeconds < evnt.EventDef.PowerupBlackoutAtEventStart() && localHumanOpponent != null && !this.IsJumpStartActive(entrantInfo, evnt))
            {
                return(true);
            }
            switch (restriction)
            {
            case Restriction.kPowerupRestriction_NobodyHasFinishedEvent:
                foreach (EntrantInfo entrantInfo2 in evnt.Entrants)
                {
                    DragScoringState dragScoringState2 = entrantInfo2.ScoringState as DragScoringState;
                    if (dragScoringState2 != null && dragScoringState2.FractionCompleted > 0.95f)
                    {
                        return(true);
                    }
                }
                break;

            case Restriction.kPowerupRestriction_IAmNotInFirstPlace:
            {
                if (dragScoringState.Rank == 1)
                {
                    return(true);
                }
                int num = 999;
                foreach (EntrantInfo entrantInfo3 in evnt.Entrants)
                {
                    bool flag = entrantInfo3.Opponent.IsStatus(OpponentStatus.kOpponent_Disconnected);
                    RouteScoringState routeScoringState = entrantInfo3.ScoringState as RouteScoringState;
                    if (routeScoringState != null && routeScoringState.FinishReason == FinishReason.Unknown && !flag && routeScoringState.Rank < num)
                    {
                        num = routeScoringState.Rank;
                    }
                }
                if (num == dragScoringState.Rank)
                {
                    return(true);
                }
                break;
            }
            }
            return(false);
        }
        // Token: 0x06001949 RID: 6473 RVA: 0x0002D43C File Offset: 0x0002C43C
        public virtual void Launch(ScoringState state)
        {
            state.EventTimer.Start();
            state.SecureEventTimer.Start();
            RouteScoringState routeScoringState = state as RouteScoringState;

            if (routeScoringState != null)
            {
                routeScoringState.LapTimer.Start();
            }
        }
        // Token: 0x0600194A RID: 6474 RVA: 0x0002D474 File Offset: 0x0002C474
        public virtual void Conclude(ScoringState state)
        {
            state.EventTimer.Stop();
            state.SecureEventTimer.Stop();
            RouteScoringState routeScoringState = state as RouteScoringState;

            if (routeScoringState != null)
            {
                routeScoringState.LapTimer.Stop();
                if (routeScoringState.FinishReason == FinishReason.CrossedFinish)
                {
                    routeScoringState.FractionCompleted = 1f;
                }
            }
        }
        // Token: 0x0600194D RID: 6477 RVA: 0x0002D654 File Offset: 0x0002C654
        protected virtual float GetFractionCompleted(RouteScoringState state, EntrantInfo entrant, InstancedEvent evnt)
        {
            float num = evnt.TrackLayout.GetLapStartToVehicleDistance(entrant.Opponent.Vehicle);
            float lapStartToCheckpointDistance = evnt.TrackLayout.GetLapStartToCheckpointDistance(entrant.RoutingState.NextIndex);

            if (num > lapStartToCheckpointDistance)
            {
                num -= evnt.TrackLayout.GetLapLength(state.CurrentLap);
            }
            for (int i = 0; i < state.CurrentLap; i++)
            {
                num += evnt.TrackLayout.GetLapLength(i);
            }
            num = Math.Max(num, 0f);
            return(Math.Min(num / evnt.TrackLayout.GetLength(evnt.NumLaps), 0.99999f));
        }
        // Token: 0x0600194C RID: 6476 RVA: 0x0002D5C4 File Offset: 0x0002C5C4
        public virtual void OnLapCompleted(EntrantInfo entrant, Event evnt, int lap)
        {
            RouteScoringState routeScoringState = entrant.ScoringState as RouteScoringState;

            if (routeScoringState != null)
            {
                routeScoringState.LapTimer.Stop();
                routeScoringState.BestLapDurationInMilliseconds = Math.Min(routeScoringState.BestLapDurationInMilliseconds, routeScoringState.LapTimer.ElapsedInMilliseconds);
                routeScoringState.CurrentLap = lap;
                LocalHumanOpponent localHumanOpponent = entrant.Opponent as LocalHumanOpponent;
                if (localHumanOpponent != null)
                {
                    FlasherManager.Get().EnqueueFlasher(new TimeFlasher(3020512949u, routeScoringState.LapTimer.ElapsedInSeconds));
                }
                routeScoringState.LapTimer.Reset();
                routeScoringState.LapTimer.Start();
            }
        }
Пример #10
0
        // Token: 0x06001921 RID: 6433 RVA: 0x0002CF60 File Offset: 0x0002BF60
        public bool IsPowerupRestricted(Restriction restriction, EntrantInfo entrantInfo, Event evnt)
        {
            if (restriction == Restriction.kPowerupRestriction_IAmNotInFirstPlace)
            {
                return(true);
            }
            PursuitScoringState pursuitScoringState = entrantInfo.ScoringState as PursuitScoringState;
            int num = 999;

            foreach (EntrantInfo entrantInfo2 in evnt.Entrants)
            {
                bool flag = entrantInfo2.Opponent.IsStatus(OpponentStatus.kOpponent_Disconnected);
                RouteScoringState routeScoringState = entrantInfo2.ScoringState as RouteScoringState;
                if (routeScoringState != null && routeScoringState.FinishReason == FinishReason.Unknown && !flag && routeScoringState.Rank < num)
                {
                    num = routeScoringState.Rank;
                }
            }
            return(pursuitScoringState != null && num == pursuitScoringState.Rank);
        }
        // Token: 0x06001944 RID: 6468 RVA: 0x0002D1E8 File Offset: 0x0002C1E8
        public void Fill(LivePacket livePacket, EntrantInfo entrant)
        {
            RouteLivePacket   routeLivePacket   = livePacket as RouteLivePacket;
            RouteScoringState routeScoringState = entrant.ScoringState as RouteScoringState;

            if (routeScoringState != null && null != routeLivePacket)
            {
                RouteEntrantLivePacket routeEntrantLivePacket = routeLivePacket.CreateEntrantLivePacket();
                routeEntrantLivePacket.SetPersonaName(entrant.Opponent.OpponentName);
                routeEntrantLivePacket.PersonaId    = entrant.PersonaId;
                routeEntrantLivePacket.FinishReason = routeScoringState.FinishReason;
                routeEntrantLivePacket.Rank         = routeScoringState.Rank;
                routeEntrantLivePacket.IsLocal      = (entrant.Opponent is LocalHumanOpponent);
                routeEntrantLivePacket.Percentage   = (float)((int)(routeScoringState.FractionCompleted * 100f)) / 100f;
                routeEntrantLivePacket.Lap          = routeScoringState.CurrentLap + 1;
                System.TimeSpan span = System.TimeSpan.FromMilliseconds(routeScoringState.LapTimer.ElapsedInMilliseconds);
                span.Fill(routeEntrantLivePacket.GetLapTime());
                uint            num   = (routeScoringState.BestLapDurationInMilliseconds == uint.MaxValue) ? 0u : routeScoringState.BestLapDurationInMilliseconds;
                System.TimeSpan span2 = System.TimeSpan.FromMilliseconds(num);
                span2.Fill(routeEntrantLivePacket.GetBestLapTime());
            }
        }
        // Token: 0x06001955 RID: 6485 RVA: 0x0002DBB4 File Offset: 0x0002CBB4
        private unsafe bool IsJumpStartActive(EntrantInfo entrantInfo, Event evnt)
        {
            LocalHumanOpponent localHumanOpponent = entrantInfo.Opponent as LocalHumanOpponent;
            RouteScoringState  routeScoringState  = entrantInfo.ScoringState as RouteScoringState;

            if (routeScoringState == null || localHumanOpponent == null)
            {
                return(false);
            }
            if (localHumanOpponent.Vehicle.IsStaging())
            {
                return(false);
            }
            float num;

            if (!localHumanOpponent.Vehicle.GetSkillModEffectAmount(SkillModEffectType.JumpStart, &num))
            {
                return(false);
            }
            float num2 = evnt.EventDef.PowerupBlackoutAtEventStart();
            float num3 = num2 - num;

            return(routeScoringState.EventDurationInSeconds <= num2 && routeScoringState.EventDurationInSeconds > num3);
        }
        // Token: 0x06001953 RID: 6483 RVA: 0x0002DA28 File Offset: 0x0002CA28
        public void EntrantResultReceived(Event evnt, XmlString xmlString)
        {
            InstancedEvent     instancedEvent = evnt as InstancedEvent;
            RouteEntrantResult routeEntrantResult;

            if (XSD2CPP.ReadRouteEntrantResult(xmlString, out routeEntrantResult) && routeEntrantResult.EventSessionId == instancedEvent.EventSessionId)
            {
                EntrantInfo entrantInfo = evnt.FindEntrant(routeEntrantResult.PersonaId);
                if (entrantInfo == null)
                {
                    return;
                }
                RouteScoringState routeScoringState = entrantInfo.ScoringState as RouteScoringState;
                if (routeScoringState != null)
                {
                    routeScoringState.HasArbitrated = true;
                    routeScoringState.FinishReason  = (FinishReason)routeEntrantResult.FinishReason;
                    routeScoringState.EventDurationInMilliseconds = routeEntrantResult.EventDurationInMilliseconds;
                    routeScoringState.Rank     = routeEntrantResult.Ranking;
                    routeScoringState.TopSpeed = routeEntrantResult.TopSpeed;
                    routeScoringState.BestLapDurationInMilliseconds = routeEntrantResult.BestLapDurationInMilliseconds;
                }
            }
        }
        // Token: 0x06001952 RID: 6482 RVA: 0x0002D958 File Offset: 0x0002C958
        public ArbitrationPacket FillArbitrationRecord(EntrantInfo entrant)
        {
            RouteScoringState routeScoringState = entrant.ScoringState as RouteScoringState;

            if (routeScoringState != null)
            {
                return(new RouteArbitrationPacket
                {
                    Rank = routeScoringState.Rank,
                    EventDurationInMilliseconds = routeScoringState.EventDurationInMilliseconds,
                    AlternateEventDurationInMilliseconds = routeScoringState.SecureEventDurationInMilliseconds,
                    HacksDetected = SecurityManager.GetHacks(),
                    FinishReason = (int)routeScoringState.FinishReason,
                    FractionCompleted = routeScoringState.FractionCompleted,
                    BestLapDurationInMilliseconds = ((routeScoringState.BestLapDurationInMilliseconds == uint.MaxValue) ? routeScoringState.LapTimer.ElapsedInMilliseconds : routeScoringState.BestLapDurationInMilliseconds),
                    TopSpeed = routeScoringState.TopSpeed,
                    LongestJumpDurationInMilliseconds = routeScoringState.LongestAirTimeInMilliseconds,
                    SumOfJumpsDurationInMilliseconds = routeScoringState.SumAirTimeInMilliseconds,
                    PerfectStart = (int)routeScoringState.PerfectStart,
                    NumberOfCollisions = routeScoringState.NumOpponentsTagged
                });
            }
            return(null);
        }
        // Token: 0x06001951 RID: 6481 RVA: 0x0002D784 File Offset: 0x0002C784
        private int Sort(EntrantInfo le, EntrantInfo re)
        {
            RouteScoringState routeScoringState  = le.ScoringState as RouteScoringState;
            RouteScoringState routeScoringState2 = re.ScoringState as RouteScoringState;

            if (routeScoringState == null || routeScoringState2 == null)
            {
                return(0);
            }
            if (!routeScoringState.IsFinishReason(FinishReason.Disconnected) && routeScoringState2.IsFinishReason(FinishReason.Disconnected))
            {
                return(-1);
            }
            if (routeScoringState.IsFinishReason(FinishReason.Disconnected) && !routeScoringState2.IsFinishReason(FinishReason.Disconnected))
            {
                return(1);
            }
            if (routeScoringState.IsFinishReason(FinishReason.Disconnected) && routeScoringState2.IsFinishReason(FinishReason.Disconnected))
            {
                if (routeScoringState.FractionCompleted <= routeScoringState2.FractionCompleted)
                {
                    return(1);
                }
                return(-1);
            }
            else
            {
                if (!routeScoringState.IsFinishReason(FinishReason.DidNotFinish) && routeScoringState2.IsFinishReason(FinishReason.DidNotFinish))
                {
                    return(-1);
                }
                if (routeScoringState.IsFinishReason(FinishReason.DidNotFinish) && !routeScoringState2.IsFinishReason(FinishReason.DidNotFinish))
                {
                    return(1);
                }
                if (routeScoringState.IsFinishReason(FinishReason.DidNotFinish) && routeScoringState2.IsFinishReason(FinishReason.DidNotFinish))
                {
                    if (routeScoringState.FinishReason == routeScoringState2.FinishReason && routeScoringState2.FractionCompleted != routeScoringState.FractionCompleted)
                    {
                        if (routeScoringState.FractionCompleted <= routeScoringState2.FractionCompleted)
                        {
                            return(1);
                        }
                        return(-1);
                    }
                }
                else
                {
                    if (routeScoringState.IsFinishReason(FinishReason.Completed) && !routeScoringState2.IsFinishReason(FinishReason.Completed))
                    {
                        return(-1);
                    }
                    if (!routeScoringState.IsFinishReason(FinishReason.Completed) && routeScoringState2.IsFinishReason(FinishReason.Completed))
                    {
                        return(1);
                    }
                    if (routeScoringState.IsFinishReason(FinishReason.CrossedFinish) && routeScoringState2.IsFinishReason(FinishReason.CrossedFinish))
                    {
                        if (routeScoringState.EventDurationInMilliseconds != routeScoringState2.EventDurationInMilliseconds)
                        {
                            if (routeScoringState.EventDurationInMilliseconds >= routeScoringState2.EventDurationInMilliseconds)
                            {
                                return(1);
                            }
                            return(-1);
                        }
                    }
                    else if (routeScoringState.FractionCompleted == 0f && routeScoringState2.FractionCompleted == 0f)
                    {
                        if (routeScoringState.DistanceToStartLine != routeScoringState2.DistanceToStartLine)
                        {
                            if (routeScoringState.DistanceToStartLine >= routeScoringState2.DistanceToStartLine)
                            {
                                return(1);
                            }
                            return(-1);
                        }
                    }
                    else if (routeScoringState.FractionCompleted != routeScoringState2.FractionCompleted)
                    {
                        if (routeScoringState.FractionCompleted <= routeScoringState2.FractionCompleted)
                        {
                            return(1);
                        }
                        return(-1);
                    }
                }
                return(le.Opponent.GridIndex - re.Opponent.GridIndex);
            }
        }