• Из-за обновления 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) последний раз были обновлены:

Проблема [NAPI / C#] Не работает RAGE.Task.Runbackground(Action)

frytech

Участник портала
15 Янв 2022
128
13
53
Не работает данный метод, вообще ничего не делает.
Может кто то знает способы распараллелить некоторые задачи на клиентской части? На серверной это возможно, а как на клиентской?
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
3,799
1,858
208
35
Не работал с С# клиент-сайдом, но беглый поиск даёт примерно такие ответы

1643565225207.png



1643565234485.png


А кто точно работает с клиентсайдом на шарпе и может подсказать - так это @xDeveluxe
 
Последнее редактирование:

frytech

Участник портала
15 Янв 2022
128
13
53
Не работал с С# клиент-сайдом, но беглый поиск даёт примерно такие ответы

Посмотреть вложение 3648


Посмотреть вложение 3649

А кто точно работает с клиентсайдом на шарпе и может подсказать - так это @xDeveluxe
Да, видел это, но это не потоки, их и нельзя использовать.
Меня интересует просто параллельный запуск определенных функций, чтобы я мог в фоне иметь задачу, которая выполняется в цикле и не грузит поток основной.
Это по-идее должен позволять RAGE.Task.RunBackground(), но он вообще ничего не выполняет.
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
На клиенте нет возможности использования любого потока, кроме основного.
Полагаю, что это может быть сделано для защиты и безопасности.
Единственная опция на данный момент, как сказано выше - использовать таймеры, которые будут выполнять действия раз в N-ое количество времени, запихнуть его в другой поток не получится, во всяком случае так об этом прямо говорится везде, при моей попытке использовать как-либо потоки - игра застывает до её выключения через диспетчер, то есть это нельзя.
 

frytech

Участник портала
15 Янв 2022
128
13
53
На клиенте нет возможности использования любого потока, кроме основного.
Полагаю, что это может быть сделано для защиты и безопасности.
Единственная опция на данный момент, как сказано выше - использовать таймеры, которые будут выполнять действия раз в N-ое количество времени, запихнуть его в другой поток не получится, во всяком случае так об этом прямо говорится везде, при моей попытке использовать как-либо потоки - игра застывает до её выключения через диспетчер, то есть это нельзя.
Да, я тоже все перепробовал.
Как вариант нашел следующее:
В js работает setInterval, можно создавать события, содержащие определенный код, написанный тоже на js, на стороне JS клиента и вызывать их из C# таким образом.
Мне нужно было написать скрипт для показывания пальцем на кнопку, соответственно постоянно надо отслеживать, в какую сторону смотрит игрок. Этот способ мне помог сейчас. Получается, что некоторые клиентские скрипты уже не будет возможности полностью написать на C#, будет эдакий гибрид.
 
Последнее редактирование:

frytech

Участник портала
15 Янв 2022
128
13
53
Да, я тоже все перепробовал.
Как вариант нашел следующее:
В js работает setInterval, можно создавать события, содержащие определенный код, написанный тоже на js, на стороне JS клиента и вызывать их из C#, таким образом.
Мне нужно было написать скрипт для показывается пальцем на кнопку, соответственно постоянно надо отслеживать, в какую сторону смотрит игрок. Этот способ мне помог сейчас. Получается, что некоторые клиентские скрипты уже не будет возможности полностью написать на C#, будет эдакий гибрид.
Конкретно, через setInterval я вызываю функцию в js зацикленно, основной поток игры не замораживается
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Конкретно, через setInterval я вызываю функцию в js зацикленно, основной поток игры не замораживается
С чего такой вывод? JS не имеет потоков в принципе, то есть ты всё равно будешь использовать основной поток игры, что в JS'е, что в C#.
 

frytech

Участник портала
15 Янв 2022
128
13
53
С чего такой вывод? JS не имеет потоков в принципе, то есть ты всё равно будешь использовать основной поток игры, что в JS'е, что в C#.
Ну, я это только что проверил)
Ничего не замораживается, хотя происходит бесконечный вызов одного метода, пока зажата клавиша.
В С# сразу же все замораживалось и только закрытие процесса помогало.
 

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Какой т окульт личности, если шарп сразу делюкса зовут лул.

Могу предложить два варианта:
Первый создать свой аналог используя рендер, просто через определенные промежутки времени дергаешь нужный тебе делегат.
Второй WaitAsync.
C#:
private async void Tickddd()
{
    int ffff = 0;
    while (true)
    {
        RAGE.Ui.Console.Log(RAGE.Ui.ConsoleVerbosity.Info, $"Wait: {ffff}");
        await RAGE.Game.Invoker.WaitAsync(1000);

        ffff++;
    }
}
1643570579735.png
 

frytech

Участник портала
15 Янв 2022
128
13
53
Какой т окульт личности, если шарп сразу делюкса зовут лул.

Могу предложить два варианта:
Первый создать свой аналог используя рендер, просто через определенные промежутки времени дергаешь нужный тебе делегат.
Второй WaitAsync.
C#:
private async void Tickddd()
{
    int ffff = 0;
    while (true)
    {
        RAGE.Ui.Console.Log(RAGE.Ui.ConsoleVerbosity.Info, $"Wait: {ffff}");
        await RAGE.Game.Invoker.WaitAsync(1000);

        ffff++;
    }
}
Посмотреть вложение 3650
О, второй способ топ. Я его и пытался через дефолтный C# использовать, а про то, что подобное есть в самом рейдже не знал. Спасибо
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Ну, я это только что проверил)
Ничего не замораживается, хотя происходит бесконечный вызов одного метода, пока зажата клавиша.
В С# сразу же все замораживалось и только закрытие процесса помогало.
Есть предположение, что ты просто не так делал вызов метода, потому и замораживалось, ибо JS точно так же будет работать в основном потоке, ведь у него других и нет.


Какой т окульт личности, если шарп сразу делюкса зовут лул.

Могу предложить два варианта:
Первый создать свой аналог используя рендер, просто через определенные промежутки времени дергаешь нужный тебе делегат.
Второй WaitAsync.
C#:
private async void Tickddd()
{
    int ffff = 0;
    while (true)
    {
        RAGE.Ui.Console.Log(RAGE.Ui.ConsoleVerbosity.Info, $"Wait: {ffff}");
        await RAGE.Game.Invoker.WaitAsync(1000);

        ffff++;
    }
}
Посмотреть вложение 3650
Хз при чём тут культ личности, если просто человек знает, что я, возможно, смогу чем-то помочь по данному вопросу (или имею какую-либо информацию).
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
3,799
1,858
208
35
Какой т окульт личности, если шарп сразу делюкса зовут лул.

Могу предложить два варианта:
Первый создать свой аналог используя рендер, просто через определенные промежутки времени дергаешь нужный тебе делегат.
Второй WaitAsync.
C#:
private async void Tickddd()
{
    int ffff = 0;
    while (true)
    {
        RAGE.Ui.Console.Log(RAGE.Ui.ConsoleVerbosity.Info, $"Wait: {ffff}");
        await RAGE.Game.Invoker.WaitAsync(1000);

        ffff++;
    }
}
Посмотреть вложение 3650

Хз о чём ты, это в целом один из двух людей на форуме с кем я общаюсь за его рамками просто. Ну и чем и как занимается тоже знаю, офк.
Исходя из этого опыта - я почти уверен что если есть какой-то нерабочий метод в апишке - то скорее всего он об этом знает, только и всего.

Про async\await кстати настолько очевидный вариант, что даже обидно стало теперь, немного.
Правда глаз дёргается конечно от async void до сих пор по привычке.
 
Последнее редактирование:

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28

DaVilka

Старожил
BackEnd developer
16 Сен 2020
759
276
128
Хз о чём ты, это в целом один из двух людей на форуме с кем я общаюсь за его рамками просто. Ну и чем и как занимается тоже знаю, офк.
Исходя из этого опыта - я почти уверен что если есть какой-то нерабочий метод в апишке - то скорее всего он об этом знает, только и всего.

Про async\await кстати настолько очевидный вариант, что даже обидно стало теперь, немного.
Правда глаз дёргается конечно от async void до сих пор по привычке.
Так лучше?
C#:
private async void pressJ()
        {
           await GetTestValue();
        }
        private async System.Threading.Tasks.Task GetTestValue()
        {
            try
            {
                var retTask = await TestTask();
                RAGE.Ui.Console.Log(RAGE.Ui.ConsoleVerbosity.Info, $"Wait: {retTask}");
            }
            catch { }
        }
        private async System.Threading.Tasks.Task<string> TestTask()
        {
            try
            {
                await RAGE.Game.Invoker.WaitAsync(1000);
                var ret = "Hello World";
                return ret;
            }
            catch { return null; }
        }
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
3,799
1,858
208
35
Да в целом-то если это евент типа нажатия на кнопку то плевать
хз как именно это хочет автор использовать
 
Последнее редактирование: