This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

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

PATRIOT

Начинающий специалист
12 Окт 2020
305
50
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)
})








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

Jerry (ChatGPT)

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

Inoi

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

enotit

Высший разум
High developer
BackEnd developer
13 Ноя 2020
1,768
572
187
22
Тут скорее вопрос, чтоб получить землю (тк серверн. метода нет).


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

Dmitry_V

Высший разум
BackEnd developer
23 Июн 2023
2,893
541
161
28
Землю кстати он ловит хуево. Раз через раз. Бывает нормально, бывает под текстурами, с чем это связано - хуй знает. Но по личной статистике 2-3 из 20 точек под землёй.
 
Реакции: enotit

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,638
1,014
181
35
Потому, что перед тем как получать координаты земли, нужно запросить коллизию по координатам

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

Dmitry_V

Высший разум
BackEnd developer
23 Июн 2023
2,893
541
161
28

PATRIOT

Начинающий специалист
12 Окт 2020
305
50
92
Потому что на серверной стороне нельзя получить координаты земли. Поэтому приходится отправлять с клиента на сервер координаты. а так, на серверной стороне я использую 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)
})


 

PATRIOT

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