• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Проблема с работами

JerryMorality

Участник портала
2 Сен 2022
71
6
49
Проблема связана со всеми работами которые ездят по меткам а именно, Автобусы и газонокосилка, другие еще не проверял, помогите понять в чем проблема


Сборка shadow
C#:
private static void timer_busStop(Player player, int way, int check)
        {
            NAPI.Task.Run(() =>
            {
                try
                {
                    NAPI.Data.SetEntityData(player, "BUS_ONSTOP", false);
                    Notify.Send(player, NotifyType.Info, NotifyPosition.BottomCenter, $"Можете ехать дальше", 3000);
                    var payment = Convert.ToInt32(BuswaysPayments[way] * Group.GroupPayAdd[Main.Accounts[player].VipLvl] * Main.oldconfig.PaydayMultiplier);
                    //надбавка с учетом уровня игрока на данной работе
                    payment += Jobs.WorkManager.PaymentIncreaseAmount[Main.Players[player].WorkID] * Main.Players[player].GetLevelAtThisWork();
                    //добавление опыта
                    if (Main.Players[player].AddExpForWork(Main.oldconfig.PaydayMultiplier))
                        Notify.Alert(player, $"Поздравляем с повышением уровня! Текущий уровень теперь: {Main.Players[player].GetLevelAtThisWork()}");
                    MoneySystem.Wallet.Change(player, payment);
                    GameLog.Money($"server", $"player({Main.Players[player].UUID})", payment, $"busCheck");
                    if (check + 1 != BusWays[way].Count) check++;
                    else check = 0;

                    var direction = (check + 1 < BusWays[way].Count) ? BusWays[way][check + 1].Pos - new Vector3(0, 0, 0.12) : BusWays[way][0].Pos - new Vector3(0, 0, 1.12);
                    var color = (BusWays[way][check].IsStop) ? new Color(255, 255, 255) : new Color(255, 0, 0);
                    NAPI.ClientEvent.TriggerClientEvent(player, "createCheckpoint", 3, 1, BusWays[way][check].Pos - new Vector3(0, 0, 1.12), 4, 0, color.Red, color.Green, color.Blue, direction);
                    NAPI.ClientEvent.TriggerClientEvent(player, "createWaypoint", BusWays[way][check].Pos.X, BusWays[way][check].Pos.Y);
                    NAPI.ClientEvent.TriggerClientEvent(player, "createWorkBlip", BusWays[way][check].Pos);

                    player.SetData("WORKCHECK", check);
                    Timers.Stop(player.GetData<string>("BUS_TIMER"));
                    player.ResetData("BUS_TIMER");

                    foreach (var p in Main.GetPlayersInRadiusOfPosition(player.Position, 30))
                        p.SendChatMessage("!{#3ADF00}Автобус отправляется по маршруту " + BusWaysNames[way]);
                }
                catch (Exception e)
                {
                    Log.Write("EXCEPTION AT \"TIMER_BUS_STOP\":\n" + e.ToString(), nLog.Type.Error);
                }
            });
        }



C#:
private static void busCheckpointEnterWay(ColShape shape, Player player)
        {
            try
            {
                if (!NAPI.Player.IsPlayerInAnyVehicle(player)) return;
                var vehicle = player.Vehicle;
                if (NAPI.Data.GetEntityData(vehicle, "TYPE") != "BUS") return;
                if (Main.Players[player].WorkID != 4 || !player.GetData<bool>("ON_WORK") || player.GetData<int>("WORKWAY") != shape.GetData<int>("WORKWAY")) return;
                var way = player.GetData<int>("WORKWAY");

                if (shape.GetData<int>("NUMBER") != player.GetData<int>("WORKCHECK")) return;
                var check = NAPI.Data.GetEntityData(player, "WORKCHECK");

                if (player.GetData<bool>("BUS_ONSTOP") == true) return;
                if (!BusWays[way][check].IsStop)
                {
                    if (NAPI.Data.GetEntityData(player, "WORKCHECK") != check) return;
                    if (check + 1 != BusWays[way].Count) check++;
                    else check = 0;

                    var direction = (check + 1 != BusWays[way].Count) ? BusWays[way][check + 1].Pos - new Vector3(0, 0, 0.12) : BusWays[way][0].Pos - new Vector3(0, 0, 1.12);
                    var color = (BusWays[way][check].IsStop) ? new Color(255, 255, 255) : new Color(255, 0, 0);
                    Trigger.ClientEvent(player, "createCheckpoint", 3, 1, BusWays[way][check].Pos - new Vector3(0, 0, 1.12), 4, 0, color.Red, color.Green, color.Blue, direction);
                    Trigger.ClientEvent(player, "createWaypoint", BusWays[way][check].Pos.X, BusWays[way][check].Pos.Y);
                    Trigger.ClientEvent(player, "createWorkBlip", BusWays[way][check].Pos);

                    NAPI.Data.SetEntityData(player, "WORKCHECK", check);
                    var payment = Convert.ToInt32(BuswaysPayments[way] * Group.GroupPayAdd[Main.Accounts[player].VipLvl] * Main.oldconfig.PaydayMultiplier);
                    //надбавка с учетом уровня игрока на данной работе
                    payment += Jobs.WorkManager.PaymentIncreaseAmount[Main.Players[player].WorkID] * Main.Players[player].GetLevelAtThisWork();
                    //добавление опыта
                    if (Main.Players[player].AddExpForWork(Main.oldconfig.PaydayMultiplier))
                        Notify.Alert(player, $"Поздравляем с повышением уровня! Текущий уровень теперь: {Main.Players[player].GetLevelAtThisWork()}");
                    MoneySystem.Wallet.Change(player, payment);
                    GameLog.Money($"server", $"player({Main.Players[player].UUID})", payment, $"busCheck");
                }
                else
                {
                    if (NAPI.Data.GetEntityData(player, "WORKCHECK") != check) return;
                    Trigger.ClientEvent(player, "deleteCheckpoint", 3, 0);
                    Trigger.ClientEvent(player, "deleteWorkBlip");

                    NAPI.Data.SetEntityData(player, "BUS_ONSTOP", true);
                    Notify.Send(player, NotifyType.Info, NotifyPosition.BottomCenter, $"Остановка. Через 10 секунд Вы сможете продолжить маршрут", 3000);
                    player.SetData("BUS_TIMER", Timers.StartOnce(10000, () => timer_busStop(player, way, check)));

                    foreach (var p in Main.GetPlayersInRadiusOfPosition(player.Position, 30))
                        p.SendChatMessage("!{#3ADF00}Через 10 секунд отходит автобус, следующий по маршруту " + BusWaysNames[way]);
                }
            }
            catch (Exception ex) { Log.Write("busCheckpointEnterWay: " + ex.Message, nLog.Type.Error); }
        }
 

Вложения

  • YA7NzN7.png
    YA7NzN7.png
    72.1 KB · Просмотры: 120

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,007
1,741
211
28
Чисто докрепляю сюда то, что писал в ЛС, когда человек спрашивал меня (до создания темы) в чём же проблема.

Ошибка, как мы видим по Exception'у, в методе busStop, который вызывается по таймеру.
Сама ошибка же говорит нам следующее:
Код:
Index was out of range. Must be non-negative and less than the size of the collection
Если эту ошибку загуглить, то ответ сразу же становится понятен, но объясню еще раз.

Ошибка появляется в том случае, когда ты обращаешься к массиву по индексу, которого в нём нет

C#:
char[] array = new char[3] { 'Q', 'W', 'E' };

Console.WriteLine($"{array[-1]}"); // Output: Index was out of range
Console.WriteLine($"{array[0]}"); // Output: Q
Console.WriteLine($"{array[1]}"); // Output: W
Console.WriteLine($"{array[2]}"); // Output: E
Console.WriteLine($"{array[3]}"); // Output: Index was out of range
Console.WriteLine($"{array[25]}"); // Output: Index was out of range

Другими словами, переводя на человеческий:
Если на столе у тебя лежит слева яблоко, спереди груша, а справа банан, то развернувшись назад - ты не сможешь ничего взять, потому что там ничего нет.

Твой массив - BusWays.
Твой индекс (переменная) - way.
Учитывая эту информацию ты можешь исправить проблему сам, но почему-то, по непонятной мне причине, не желаешь потратить на это время.
 
Реакции: FireFeed

Similar threads