public static async Task PlayerLeaveConvoyAsync(Player player)
        {
            var convoy = player.Convoy;

            if (convoy == null)
            {
                return;
            }

            if (convoy.Members.Count == 1)
            {
                await CancelConvoyAsync(convoy);

                return;
            }

            player.IsInConvoy = false;
            player.Convoy     = null;

            convoy.MemberText.Hide(player);
            convoy.LeaderText.Hide(player);

            if (!player.MissionTextDraw.IsDisposed)
            {
                player.MissionTextDraw.Text = Messages.NoMissionText;
            }

            if (convoy.Members[0] == player)
            {
                convoy.Members.Remove(player);

                var newLeader = convoy.Members[0];
                convoy.MemberText.Hide(newLeader);
            }
            else
            {
                convoy.Members.Remove(player);
                await MissionsController.ClassEndMissionAsync(player);
            }
        }
Exemple #2
0
        public static async Task JailPlayerAsync(Player finedPlayer, int jailSeconds)
        {
            var finedPlayerAccount = finedPlayer.Account;

            finedPlayer.RemoveFromVehicle();
            finedPlayer.VirtualWorld = Configuration.Instance.JailWorld;
            finedPlayer.Interior     = 10;
            finedPlayer.Position     = new Vector3(220.0, 110.0, 999.1);

            finedPlayerAccount.Jailed = jailSeconds;
            await AccountRepository.UpdateAsync(finedPlayerAccount);

            finedPlayer.JailingTimer?.Dispose();
            finedPlayer.JailingTimer       = new Timer(TimeSpan.FromSeconds(1), true);
            finedPlayer.JailingTimer.Tick += (sender, e) => JailingTimer_Tick(sender, e, finedPlayer);

            if (finedPlayer.IsDoingMission)
            {
                await MissionsController.ClassEndMissionAsync(finedPlayer);

                finedPlayer.GameText($"~w~You ~r~failed~w~ your mission. You lost ~y~${Configuration.Instance.FailedMissionPrice}~w~ to cover expenses.", 5000, 4);
                await finedPlayer.RewardAsync(-Configuration.Instance.FailedMissionPrice);
            }
        }
Exemple #3
0
        public static async void ConvoyTimer_Tick(object sender, EventArgs e, MissionConvoy convoy)
        {
            convoy.UpdateTextDraw();

            var leader = convoy.Members[0];

            switch (convoy.MissionStep)
            {
            case 0:
                var isSameTrailer = true;

                if (leader.IsDoingMission)
                {
                    convoy.MissionCargo       = leader.MissionCargo;
                    convoy.FromLocation       = leader.FromLocation;
                    convoy.ToLocation         = leader.ToLocation;
                    convoy.ConvoyTrailerModel = leader.Vehicle?.Trailer?.Model ?? 0;

                    if (convoy.ConvoyTrailerModel != 0)
                    {
                        foreach (var member in convoy.Members)
                        {
                            if (member == leader)
                            {
                                continue;
                            }

                            if (member.Vehicle?.Trailer?.Model == convoy.ConvoyTrailerModel)
                            {
                                continue;
                            }

                            switch (convoy.ConvoyTrailerModel)
                            {
                            case VehicleModelType.ArticleTrailer:
                            case VehicleModelType.ArticleTrailer3:
                                member.MissionTextDraw.Text = Messages.MissionConvoyCargoTrailerNeeded;
                                break;

                            case VehicleModelType.ArticleTrailer2:
                                member.MissionTextDraw.Text = Messages.MissionConvoyOreTrailerNeeded;
                                break;

                            case VehicleModelType.PetrolTrailer:
                                member.MissionTextDraw.Text = Messages.MissionConvoyFluidsTrailerNeeded;
                                break;
                            }

                            isSameTrailer = false;
                        }
                    }
                    else
                    {
                        foreach (var member in convoy.Members)
                        {
                            if (member == leader)
                            {
                                continue;
                            }

                            if (member.Vehicle?.Model == VehicleModelType.DFT30 &&
                                member.Vehicle?.Model == VehicleModelType.Flatbed)
                            {
                                continue;
                            }

                            isSameTrailer = false;
                            member.MissionTextDraw.Text = Messages.MissionConvoyNoTrailerVehicleNeeded;
                        }
                    }

                    if (isSameTrailer)
                    {
                        leader.SendClientMessage(Color.GreenYellow, Messages.MissionConvoyReadyToGo);

                        foreach (var member in convoy.Members)
                        {
                            if (member == leader)
                            {
                                continue;
                            }

                            convoy.StartMemberJob(member);
                        }

                        convoy.MissionStep = 1;
                        convoy.Status      = ConvoyStatus.Closed;
                    }
                    else
                    {
                        if (!convoy.IsLeaderInformed)
                        {
                            leader.SendClientMessage(Color.Red, Messages.MissionConvoyCantGo);
                            convoy.IsLeaderInformed = true;
                        }
                    }
                }

                break;

            case 1:
                var areAllMembersLoaded = true;

                foreach (var member in convoy.Members)
                {
                    if (member.MissionStep != 2)
                    {
                        areAllMembersLoaded = false;
                    }
                }

                if (areAllMembersLoaded)
                {
                    leader.SendClientMessage(Color.GreenYellow, Messages.MissionConvoyMembersLoaded);

                    foreach (var member in convoy.Members)
                    {
                        convoy.UpdateMemberJob(member);
                    }

                    convoy.MissionStep = 2;
                }

                break;

            case 2:
                var didAllMembersUnloaded = true;

                foreach (var member in convoy.Members)
                {
                    if (member.MissionStep != 4)
                    {
                        didAllMembersUnloaded = false;
                    }
                }

                if (didAllMembersUnloaded)
                {
                    convoy.MissionStep = 3;
                }
                break;

            case 3:
                var numberOfMembers = convoy.Members.Count;

                var payment = MissionsController.CalculatePayment(convoy.FromLocation, convoy.ToLocation,
                                                                  convoy.MissionCargo);

                if (!BonusMission.IsMissionFinished &&
                    BonusMission.RandomCargo == convoy.MissionCargo &&
                    BonusMission.RandomFromLocation == convoy.FromLocation &&
                    BonusMission.RandomToLocation == convoy.ToLocation)
                {
                    payment *= 2;
                    BonusMission.IsMissionFinished = true;
                    BasePlayer.SendClientMessageToAll(
                        $"{{00BBFF}}Convoy with leader {{FFBB00}}{leader.Name}{{00BBFF}} has finished the bonus mission.");
                }

                var bonus = numberOfMembers * 25 + 100;
                payment = payment * bonus / 100;

                foreach (var member in convoy.Members)
                {
                    await member.RewardAsync(payment, 5);

                    var memberAccount = member.Account;
                    memberAccount.ConvoyJobs++;
                    await AccountRepository.UpdateAsync(memberAccount);

                    await MissionsController.ClassEndMissionAsync(member);

                    member.SendClientMessage(Color.White,
                                             $"{{00FF00}}You finished the convoy and earned ${payment}");

                    if (member != convoy.Members[0])
                    {
                        member.MissionTextDraw.Text = Messages.MissionConvoyWaitingForLeader;
                    }
                }

                convoy.MissionCargo       = null;
                convoy.FromLocation       = null;
                convoy.ToLocation         = null;
                convoy.Status             = ConvoyStatus.Open;
                convoy.MissionStep        = 0;
                convoy.ConvoyTrailerModel = 0;
                convoy.IsLeaderInformed   = false;
                break;
            }
        }