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

Проблема Позиция Z у игрока после смерти

PATRIOT

Активный участник
12 Окт 2020
264
36
92
Кто то может пожалуйста подсказать? В чем может быть проблема? После смерти, с клиента на сервер отправляется call, который мы принимаем. Отправляем мы координаты Z земли на сервер, и на самом сервере уже задаем позицию игрока Z такую, которую получили, т.е позицию Z земли <-- Надо чтобы после смерти у меня персонаж оказался ровно на земле, а не так, чтобы при смерти в воздухе, персонаж завис в воздухе.

client:
JavaScript:
mp.events.add('playerDeath', (player: PlayerMp, reason: number, killer: PlayerMp) => {
  const playerPos = mp.players.local.position
  const getGroundZ = mp.game.gameplay.getGroundZFor3dCoord(playerPos.x, playerPos.y, playerPos.z, true, false)
  rpc.callServer('client:playerDeath', [getGroundZ])
  mp.players.local.freezePosition(true)
})

server:
JavaScript:
rpc.register('client:playerDeath', (player: PlayerMp, groundZ: number) => {
    player.position = new mp.Vector3(player.position.x, player.position.y, groundZ)
})








Буду благодарен вашей помощи
:cat2~2:
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,260
234
5
Проблема скорее всего в том, что вы задаете позицию игрока сразу после смерти, когда он еще находится в процессе анимации падения. Попробуйте задержать установку позиции на некоторое время после смерти, чтобы персонаж успел достичь земли. Например, с помощью setTimeout().
 

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
3,844
1,889
208
35
я возможно чего-то не понимаю
но на кой хуй такие костыли?
есть же https://wiki.rage.mp/wiki/PlayerDeath серверный который буквально всегда выполняется при смерти
зачем что-то ещё регать на клиенте, на сервере и отправлять?
 
Реакции: Slash

enotit

Гений
High developer
BackEnd developer
13 Ноя 2020
1,557
491
187
21
я возможно чего-то не понимаю
но на кой хуй такие костыли?
есть же https://wiki.rage.mp/wiki/PlayerDeath серверный который буквально всегда выполняется при смерти
зачем что-то ещё регать на клиенте, на сервере и отправлять?
Тут скорее вопрос, чтоб получить землю (тк серверн. метода нет).


Кто то может пожалуйста подсказать? В чем может быть проблема? После смерти, с клиента на сервер отправляется call, который мы принимаем. Отправляем мы координаты Z земли на сервер, и на самом сервере уже задаем позицию игрока Z такую, которую получили, т.е позицию Z земли <-- Надо чтобы после смерти у меня персонаж оказался ровно на земле, а не так, чтобы при смерти в воздухе, персонаж завис в воздухе.

client:
JavaScript:
mp.events.add('playerDeath', (player: PlayerMp, reason: number, killer: PlayerMp) => {
  const playerPos = mp.players.local.position
  const getGroundZ = mp.game.gameplay.getGroundZFor3dCoord(playerPos.x, playerPos.y, playerPos.z, true, false)
  rpc.callServer('client:playerDeath', [getGroundZ])
  mp.players.local.freezePosition(true)
})

server:
JavaScript:
rpc.register('client:playerDeath', (player: PlayerMp, groundZ: number) => {
    player.position = new mp.Vector3(player.position.x, player.position.y, groundZ)
})








Буду благодарен вашей помощи
:cat2~2:
чуть по другому бы сделать: использовать серверный слушатель и там повесить shared data, а на клиентах уже ловить, там же ловить и землю, и анимацию.
 

Dmitry_V

Гений
23 Июн 2023
2,122
346
131
27
Землю кстати он ловит хуево. Раз через раз. Бывает нормально, бывает под текстурами, с чем это связано - хуй знает. Но по личной статистике 2-3 из 20 точек под землёй.
 
  • Love
Реакции: enotit

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,311
772
181
34
Землю кстати он ловит хуево. Раз через раз. Бывает нормально, бывает под текстурами, с чем это связано - хуй знает. Но по личной статистике 2-3 из 20 точек под землёй.
Потому, что перед тем как получать координаты земли, нужно запросить коллизию по координатам

JavaScript:
mp.game.streaming.requestCollisionAtCoord(x,y,z)
 

PATRIOT

Активный участник
12 Окт 2020
264
36
92
я возможно чего-то не понимаю
но на кой хуй такие костыли?
есть же https://wiki.rage.mp/wiki/PlayerDeath серверный который буквально всегда выполняется при смерти
зачем что-то ещё регать на клиенте, на сервере и отправлять?
Потому что на серверной стороне нельзя получить координаты земли. Поэтому приходится отправлять с клиента на сервер координаты. а так, на серверной стороне я использую event playerDeath.

Почему то player.position не хочет задаваться, а вот player.spawn работает, но багается анимка. все таки это наверное не то?
client:
JavaScript:
mp.events.add('playerDeath', (player: PlayerMp, reason: number, killer: PlayerMp) => {
  const playerPos = mp.players.local.position
  const getGroundZ = mp.game.gameplay.getGroundZFor3dCoord(playerPos.x, playerPos.y, playerPos.z, true, false)
  mp.game.gameplay.setFadeOutAfterDeath(false)
  rpc.callServer('client:playerDeath', [getGroundZ])
  mp.players.local.freezePosition(true)
})

server:
JavaScript:
mp.events.add('playerDeath', (player: PlayerMp, reason: number, killer: PlayerMp) => {
  player.playAnimation('amb@world_human_bum_slumped@male@laying_on_left_side@base', 'base', 1, 49)
})



rpc.register('client:playerDeath', (player: PlayerMp, groundZ: number) => {
  console.log(groundZ)
  //player.position = new mp.Vector3(player.position.x, player.position.y, groundZ)
  player.spawn(new mp.Vector3(player.position.x, player.position.y, groundZ))
  setTimeout(() => {
    console.log(`Позиция Z через 2 сек: ${player.position.z}`)
  }, 2000)
})


1746452248767.png
 

PATRIOT

Активный участник
12 Окт 2020
264
36
92
Решил проблему. Сделал через player.spawn. То что анимка странно себя повела - поставил неправильный флаг анимации
 
Реакции: Stefan_