#DeltaSCR

Teleporte com Alterações de Camera.

Recommended Posts

Olá, gostaria de compartilhar aqui a minha dúvida - em um código produzido por mim, me deparei com a seguinte situação: Ao usar setCameraMatrix e alguns instantes depois retornar a câmera ao localPlayer, o player é levado ao "limbo" retornando após a uma posição um pouco distante de onde ele se encontrava. Tentei de diversas maneiras resolver, porém falhei miseravelmente.

function closePainel(button, state, absoluteX, absoluteY, worldX, worldY, worldZ, clickedWorld)
	if painelDirectX == true then
		if button == "left" and state == "down" then
			if not isCursorOnElement(screenW * 0.2813, screenH * 0.1500, screenW * 0.4375, screenH * 0.7000) then
				DeltaA()
			elseif isCursorOnElement(screenW * 0.2891, screenH * 0.2083, screenW * 0.1172, screenH * 0.4917) then
				local idSkin = getElementModel(selectedP)
				local pedSkin = createPed(idSkin, 1224.888, -1632.233, 27.375, 180)
				DeltaA()
				showChat(false) 
				local x, y, z = getElementPosition(localPlayer)
				local rx, ry, rz = getElementRotation(localPlayer)
				setCameraMatrix(1224.888, -1636.233, 27.375, 1250, 0, 0)
				setTimer(function()
					setCameraTarget(localPlayer)
					setTimer(function()
						setElementPosition(localPlayer, x, y, z + 1)
						setElementRotation(localPlayer, rx, ry, rz)
					end, 1, 1)
					setElementFrozen(localPlayer, false)
					destroyElement(pedSkin)
					pedSkin = nil
					DeltaA()
				end, 5000, 1)
			end
		end
	end
end
addEventHandler("onClientClick", root, closePainel)

 

Share this post


Link to post

Tenta:

  • setCameraInterior / setCameraDimension (antes do setCameraMatrix)
  • setCameraInterior quando voltar para o player (assumindo que você esteja setando um interior no cliente)
  • Antes de setCameraMatrix, mudar o interior do player e voltar quando retornar a camera pra ele; Ou
  • Setar novamente as coordenadas / interior do jogador quando retornar a câmera

Share this post


Link to post

Bom, setar as coordenadas do player eu tentei, não deu certo; O bug acontece mesmo estando fora de qualquer interior, e dimensão 0.

Share this post


Link to post

Tenta em vez de setCameraMatrix usar getCamera() e setElementPosition/rotation

  • Thanks 1

Share this post


Link to post
Posted (edited)

Ok, aparentemente funcionou, porém infelizmente o player não pode estar dentro de um veículo.

Edited by #DeltaSCR

Share this post


Link to post

@#DeltaSCR Espera, você conseguiu resolver o problema? Se sim seria muito útil você compartilhar aqui, pois outras pessoas com esse problema irão procurar uma solução e ela pode ser a sua.

Share this post


Link to post

Ah sim, claro, que egoísmo da minha parte 😬. Vamos lá:

  • Eu estava usando setCameraMatrix, então você( @DNL291 ) me recomendou trocar por getCamera - e assim eu fiz, criei uma variável com a função anterior.
local cam = getCamera()
  •  Logo em seguida, com setElementPosition, eu setei a posição da câmera, utilizando da variável criada anteriormente para as coordenadas que eu estava utilizando com setCameraMatrix.
Spoiler

setElementPosition(cam, 1224.888, -1636.233, 27.375)

 

Resolveu o problema do player ir para o limbo? Sim, porém quando estava de carro, ele continuava ;-;

  • Creio eu que seja bug do próprio MTA:SA, então no meu server-side, eu verifiquei se o jogador estava em um veículo, com getPedOccupiedVehicle, caso estivesse, entraria em condição else e não executaria o resto do código.

P.S.: Desculpe se tiver algum erro aí rs

  • Like 1

Share this post


Link to post
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.