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

PATRIOT

Начинающий специалист
12 Окт 2020
302
49
92
Всем привет. Как уже не пробовал - не работает.
Почему то отказывается срабатывать цикл
Код:

JavaScript:
export let showPlayerNameTag = false
const target = mp.players.local
const maxDistance = 17 * 17


mp.nametags.enabled = false
mp.keys.bind(global.Keys.VK_F9, false, () => {
showPlayerNameTag = !showPlayerNameTag
})

mp.events.add('render', (nametags) => {
if (nametags && nametags.forEach) {
nametags.forEach(([player, x, y, distance]) => {
if (player.handle === 0 || player === target) return
      if (distance > maxDistance) return

      mp.game.graphics.drawText(`(${player.remoteId} Pidor)`,
          [x, y], {
font: 4,
color: [255, 255, 255, 255],
scale: [0.35, 0.35],
outline: true
          })
    })
  }
})
 
  • Love
Реакции: enotit

m0v1l3

Начинающий специалист
29 Сен 2020
529
67
95
if (player.handle === 0 || player === target) return if (distance > maxDistance) return
не имей привычку в циклах использовать return - это останавливает весь цикл, используй continue (может быть в этом и заключается проблема)
 

johndoe

Участник портала
10 Май 2025
56
22
20
не имей привычку в циклах использовать return - это останавливает весь цикл, используй continue (может быть в этом и заключается проблема)

Не имей привычку подсказывать не смотря в код. return не тормозит forEach
1754928270528.png
 
Реакции: XDeveluxe

UchihaMadara

Гений
FrontEnd developer
27 Окт 2020
876
321
141
И объясни, почему у тебя код рейджа, а пишешь ты в разделе FiveM
 

USTON_TM

Новый участник
12 Май 2025
9
0
3
mp.nametags.enabled = true

В начале render просто не вызывать дефолтный рендер, а отрисовывать свои.

Ну или не использовать массив
nametags
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,992
1,726
211
28
mp.nametags.enabled = true

В начале render просто не вызывать дефолтный рендер, а отрисовывать свои.

Ну или не использовать массив
nametags
mp.nametags.enabled включит стандартное отображение nametags (имя, хп, армор).
Тут же попытка вывести собственный текст.
Если в ивенте render обозначить 1 аргумент, то в этот первый аргумент будет приходить массив с всеми nametags неподалёку.
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,457
866
181
34
Реакции: XDeveluxe

USTON_TM

Новый участник
12 Май 2025
9
0
3
mp.nametags.enabled включит стандартное отображение nametags (имя, хп, армор).
Тут же попытка вывести собственный текст.
Если в ивенте render обозначить 1 аргумент, то в этот первый аргумент будет приходить массив с всеми nametags неподалёку.
mp.nametags.enabled можно оставить false.

JavaScript:
mp.events.add('render', () => {
    mp.players.forEachInStreamRange((player) => {
        if (player.handle === 0 || player === mp.players.local) return
        const pos = player.getBoneCoords(12844, 0, 0, 0)
        const dist = mp.game.gameplay.getDistanceBetweenCoords(
            mp.players.local.position.x,
            mp.players.local.position.y,
            mp.players.local.position.z,
            pos.x, pos.y, pos.z, true
        )
        if (dist > 17) return

        const [x, y] = mp.game.graphics.world3dToScreen2d(pos.x, pos.y, pos.z + 0.5)
        if (x && y) {
            mp.game.graphics.drawText(`(${player.remoteId} Pidor)`,
                [x, y],
                {
                    font: 4,
                    color: [255, 255, 255, 255],
                    scale: [0.35, 0.35],
                    outline: true
                }
            )
        }
    })
})
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,457
866
181
34
не имей привычку в циклах использовать return - это останавливает весь цикл, используй continue (может быть в этом и заключается проблема)
Вот только лучше использовать for...of вместо forEach, в forEach нет аналога continue
 
Реакции: m0v1l3

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,992
1,726
211
28
Вот только лучше использовать for...of вместо forEach, в forEach нет аналога continue
в forEach просто делается return, тогда конкретный элемент не пойдёт дальше по коду, но следующий пойдёт.
Чтобы остановить forEach нужно использовать break
 

PATRIOT

Начинающий специалист
12 Окт 2020
302
49
92
Спасибо всем огромное за помощь. ❤️ Извиняюсь, не заметил что в разделе FiveM написал.
 
Реакции: enotit

johndoe

Участник портала
10 Май 2025
56
22
20
в forEach просто делается return, тогда конкретный элемент не пойдёт дальше по коду, но следующий пойдёт.
Чтобы остановить forEach нужно использовать break

Паш, я надеюсь ты зарофлил по поводу break

1754973501328.png


По-моему единственное, что действительно может остановить forEach - это ошибка)

1754973562013.png
 
  • Love
Реакции: m0v1l3, XDeveluxe и enotit

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,992
1,726
211
28
Паш, я надеюсь ты зарофлил по поводу break

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

По-моему единственное, что действительно может остановить forEach - это ошибка)

Посмотреть вложение 21295
my bad, типичная ошибка шарписта.
Я явно знал, что return не останавливает весь forEach и предположил, что break должен это делать, а оно вон как.
Спасибо, что поправил, теперь я знаю больше, плюс рэп тебе
 
Реакции: PATRIOT и johndoe

UchihaMadara

Гений
FrontEnd developer
27 Окт 2020
876
321
141
Извини. 500 рублей нет, чтобы ты подсказал, как открывать её :roflanebalo:
Вот что будет, если я тебе буду постоянно писать "Привет, можешь подарить 500р?".

А то бля как помощь просить бесплатно, так ты первый.
 

PATRIOT

Начинающий специалист
12 Окт 2020
302
49
92
Вот что будет, если я тебе буду постоянно писать "Привет, можешь подарить 500р?".

А то бля как помощь просить бесплатно, так ты первый.
Я не просил у тебя помощи, я хотел чтобы ты подсказал. Достаточно было написать, ну например: "Опираются на собесе на СУБД, или на NodeJS" и все)
А так я тебя понимаю. Может друг друга недопоняли
 

UchihaMadara

Гений
FrontEnd developer
27 Окт 2020
876
321
141
Я не просил у тебя помощи, я хотел чтобы ты подсказал.
А это не одно и тоже?

Достаточно было написать, ну например: "Опираются на собесе на СУБД, или на NodeJS" и все)
Что значит "достаточно"? Ты как у себя это в голове уложил? Я почему должен тебе что-то писать?
Хочешь получить информацию - плати. Нет - отдыхай.

Уровень наглости - отвлекать человека своими вопросами, а потом ещё удивляться, что информация стоит денег.
 

PATRIOT

Начинающий специалист
12 Окт 2020
302
49
92
Странно как-то работает drawText. Когда render помещен в Interval, то текст отображается правильно.
Но если уберу Intreval и будет один render, то вывод в консоль работает, а drawText над игроком нет.
Но setInterval как я понимаю не очень хорошая идея.

Рабочая версия (Typescript):
JavaScript:
mp.nametags.enabled = false
setInterval(() => {
  mp.events.add('render', () => {
    mp.console.logWarning('Render работает')
    mp.players.forEachInStreamRange((player: PlayerMp) => {
      mp.console.logWarning('1')
      if (player.handle === 0 || player === mp.players.local) return
      mp.console.logWarning('2')
      const targetPos = player.getBoneCoords(12844, 0, 0, 0)
      const localPos = mp.players.local.position
      const distance = mp.game.gameplay.getDistanceBetweenCoords(
        localPos.x, localPos.y, localPos.z,
        targetPos.x, targetPos.y, targetPos.z,
        true
      )
      if (distance > 15) return
      mp.console.logWarning('3')
      const { x, y } = mp.game.graphics.world3dToScreen2d(new mp.Vector3(targetPos.x, targetPos.y, targetPos.z + 0.5))
      if (x && y) {
        mp.console.logWarning('4')
        drawTag(x, y, `Местный «${player.remoteId}»`, [255, 255, 255, 255])
      }
    })
  })
}, 3000)

const drawTag = (x: number, y: number, tag: string, color: Array4d) => {
  mp.game.graphics.drawText(tag, [x, y], { font: 4, color: color, scale: [0.3, 0.3], outline: true })
}