So, I always wanted to try making GTA first person view, just for the heck of it. The code below can be inserted into your client side script, and to use it, you go in the game and use the command "/fps on" and "/fps off" to toggle the view. You can run around the map in first person view mode, and of course you'll be able to see your hands and feet. I'm not able to implement first person driving and targeting, due to certain limitations, but perhaps in later releases we can do that. also try ducking, and you'll see the camera lowers as well. Please feel free to expand on it so it becomes more fun.
EDIT: now you can see from the driver's view when you sit in a car. if it doesn't work, just hold aim button and release.
--global variables
g_root = getRootElement()
cameraFixed = false
--custom functions
function toggleCameraFixedModeEx(mode)
if (mode == false) then
toggleCameraFixedMode(false)
cameraFixed = false
else
toggleCameraFixedMode(true)
--setCameraLookAt(2000, 2000, 0)
cameraFixed = true
end
end
function getCameraModeEx()
return cameraFixed
end
---places player camera in front of player every frame
isFPS = false
function turnCamera(cursorX, cursorY, absoluteX, absoluteY, wX, wY, wZ)
if (fpsOff() == true) then
toggleCameraFixedModeEx(false)
return true
elseif (getCameraModeEx() == false) then
toggleCameraFixedModeEx(true)
end
setCameraLookAt(wX, wY, wZ)
local player = getLocalPlayer()
local x,y,z = getElementPosition(player)
local r = 0
local dx = wX-x
local dy = wY-y
local backing = getControlState("backwards")
if (dx < 0 and dy >0) then
--II
r = math.deg((math.atan((wY-y)/(wX-x))))+180
elseif (dx < 0 and dy < 0) then
--III
r = math.deg((math.atan((wY-y)/(wX-x))))+180
else
--I and IV
r = math.deg((math.atan((wY-y)/(wX-x))))
end
r = r-90
if (r < 0) then
r = r + 360
elseif (r > 360) then
r = r - 360
end
if (backing == false) then
setPlayerRotation(player, r)
x = x + 0.4 * math.cos(math.rad(r+90))
y = y + 0.4 * math.sin(math.rad(r+90))
if (isPlayerDucked(player) == false) then
setCameraPosition(x, y, z+0.7)
else
setCameraPosition(x, y, z)
end
end
end
addEventHandler("onClientCursorMove", g_root, turnCamera)
function moveCamera()
if (fpsOff() == true) then
toggleCameraFixedModeEx(false)
return true
elseif (getCameraModeEx() == false) then
toggleCameraFixedModeEx(true)
end
local player = getLocalPlayer()
--getting new camera position
local x,y,z = getElementPosition(player)
local r = getPlayerRotation(player)
x = x + 0.4 * math.cos(math.rad(r+90))
y = y + 0.4 * math.sin(math.rad(r+90))
if (isPlayerDucked(player) == false) then
setCameraPosition(x, y, z+0.7)
else
setCameraPosition(x, y, z)
end
end
addEventHandler("onClientRender", g_root, moveCamera)
function fpsOff()
local player = getLocalPlayer()
--if (isPlayerInVehicle(player) == true) then
--return false
if (getControlState("aim_weapon") == true) then
return true
elseif (isFPS == false) then
return true
else
return false
end
end
function fixCamera ( command, state)
if (state == "on") then
toggleCameraFixedModeEx(true)
isFPS = true
elseif (state == "off") then
toggleCameraFixedModeEx(false)
isFPS = false
end
end
addCommandHandler("fps", fixCamera)
function refixCamera(theVehicle, seat)
if (isFPS == "true") then
toggleCameraFixedModeEx(true)
end
end
addEventHandler("onClientPlayerVehicleEnter", g_root, refixCamera)