
Seddo
Members-
Posts
39 -
Joined
-
Last visited
Everything posted by Seddo
-
I attached object to the vehicle, but i have the same problem... What is wrong? function toggleCockpitView () if (not isEnabled) then isEnabled = true addEventHandler ("onClientPreRender", root, camera) else isEnabled = false setCameraTarget (localPlayer, localPlayer) removeEventHandler ("onClientPreRender", root, camera) end end addCommandHandler("racecam", toggleCockpitView) function camera() if (isEnabled) then local x, y, z = getElementPosition(getLocalPlayer()) local vehicle = getPedOccupiedVehicle(getLocalPlayer()) gnat = createObject(3803, x+0.37, y+0.6, z+0.6) setElementAlpha(gnat, 0) if not vehicle then return end local tarX, tarY, tarZ = getElementPosition(gnat) local velX, velY, velZ = getElementVelocity(vehicle) local rotX, rotY, rotZ = getElementRotation(gnat) local vel3D = (velX^2+velY^2+velZ^2)^0.5 if(vel3D == 0)then local camX, camY, camZ = getRotatedPosition(gnat, 0, 0, 0) return end local relX = velX / vel3D local relY = velY / vel3D local relZ = velZ / vel3D local camX, camY, camZ = tarX, tarY, tarZ camX, camY, camZ = camX-relX, camY-relY, camZ-relZ local hit, hitX, hitY, hitZ = processLineOfSight(tarX, tarY, tarZ, camX, camY, camZ, true, false, false, true, false, true, true, true) local rot = 0 if hit and (rotX >= 45 and rotX <= 360-45)then rot = 180 camX, camY, camZ = getRotatedPosition(gnat, 0, 0, 0) camX, camY, camZ = camX-relX, camY-relY, camZ-relZ else rot = -rotY end setCameraMatrix(camX, camY, camZ, tarX, tarY, tarZ) end end function getRotatedPosition(element, distX, distY, distZ) if not element or not isElement(element) then return end local matrix = getElementMatrix(element) if not matrix then return end local offX = distX * matrix[1][1] + distY * matrix[2][1] + distZ * matrix[3][1] + 1 * matrix[4][1] local offY = distX * matrix[1][2] + distY * matrix[2][2] + distZ * matrix[3][2] + 1 * matrix[4][2] local offZ = distX * matrix[1][3] + distY * matrix[2][3] + distZ * matrix[3][3] + 1 * matrix[4][3] return offX, offY, offZ end
-
Thank you for idea! But first i will try to attach object to vehicle.
-
Hello, please help to correct one mistake. Here the script, the idea was to make 1st person camera in car. But if i try to move the camera on the X or Y axis there is some bag. For example if i set the value tarX = tarX + 0.37 then when i turn the car left or right in game, point of view is rotated around the zero coordinates (around the center of the vehicle). Can i fix it? function toggleCockpitView () if (not isEnabled) then isEnabled = true addEventHandler ("onClientPreRender", root, camera) else isEnabled = false setCameraTarget (localPlayer, localPlayer) removeEventHandler ("onClientPreRender", root, camera) end end addCommandHandler("racecam", toggleCockpitView) function camera() if (isEnabled) then local vehicle = getPedOccupiedVehicle(getLocalPlayer()) if not vehicle then return end local tarX, tarY, tarZ = getElementPosition(vehicle) tarX = tarX tarY = tarY tarZ = tarZ local velX, velY, velZ = getElementVelocity(vehicle) local rotX, rotY, rotZ = getElementRotation(vehicle) local vel3D = (velX^2+velY^2+velZ^2)^0.5 if(vel3D == 0)then local camX, camY, camZ = getRotatedPosition(vehicle, 0, 0, 0) return end local relX = velX / vel3D local relY = velY / vel3D local relZ = velZ / vel3D local camX, camY, camZ = tarX, tarY, tarZ camX, camY, camZ = camX-relX, camY-relY, camZ-relZ local hit, hitX, hitY, hitZ = processLineOfSight(tarX, tarY, tarZ, camX, camY, camZ, true, false, false, true, false, true, true, true) local rot = 0 if hit and (rotX >= 45 and rotX <= 360-45)then rot = 180 camX, camY, camZ = getRotatedPosition(vehicle, 0, 0, 0) camX, camY, camZ = camX-relX, camY-relY, camZ-relZ else rot = -rotY end setCameraMatrix(camX, camY, camZ+0.45, tarX, tarY, tarZ+0.45) end end function getRotatedPosition(element, distX, distY, distZ) if not element or not isElement(element) then return end local matrix = getElementMatrix(element) if not matrix then return end local offX = distX * matrix[1][1] + distY * matrix[2][1] + distZ * matrix[3][1] + 1 * matrix[4][1] local offY = distX * matrix[1][2] + distY * matrix[2][2] + distZ * matrix[3][2] + 1 * matrix[4][2] local offZ = distX * matrix[1][3] + distY * matrix[2][3] + distZ * matrix[3][3] + 1 * matrix[4][3] return offX, offY, offZ end
-
Приветствую, помогите пожалуйста разобраться с одним моментом. Ниже скрипт, идея была сделать вид от 1го лица. Но если смещать камеру по оси X или Y то получается фигня. Нарпмер если выставить значение tarX = tarX+0.37 то при повороте авто точка обзора вращается по кругу относительно нулевой координаты (т.е. центра машины). Есть возможность победить это? function toggleCockpitView () if (not isEnabled) then isEnabled = true addEventHandler ("onClientPreRender", root, camera) else isEnabled = false setCameraTarget (localPlayer, localPlayer) removeEventHandler ("onClientPreRender", root, camera) end end addCommandHandler("racecam", toggleCockpitView) function camera() if (isEnabled) then local vehicle = getPedOccupiedVehicle(getLocalPlayer()) if not vehicle then return end local tarX, tarY, tarZ = getElementPosition(vehicle) tarX = tarX tarY = tarY tarZ = tarZ local velX, velY, velZ = getElementVelocity(vehicle) local rotX, rotY, rotZ = getElementRotation(vehicle) local vel3D = (velX^2+velY^2+velZ^2)^0.5 if(vel3D == 0)then local camX, camY, camZ = getRotatedPosition(vehicle, 0, 0, 0) return end local relX = velX / vel3D local relY = velY / vel3D local relZ = velZ / vel3D local camX, camY, camZ = tarX, tarY, tarZ camX, camY, camZ = camX-relX, camY-relY, camZ-relZ local hit, hitX, hitY, hitZ = processLineOfSight(tarX, tarY, tarZ, camX, camY, camZ, true, false, false, true, false, true, true, true) local rot = 0 if hit and (rotX >= 45 and rotX <= 360-45)then rot = 180 camX, camY, camZ = getRotatedPosition(vehicle, 0, 0, 0) camX, camY, camZ = camX-relX, camY-relY, camZ-relZ else rot = -rotY end setCameraMatrix(camX, camY, camZ+0.45, tarX, tarY, tarZ+0.45) end end function getRotatedPosition(element, distX, distY, distZ) if not element or not isElement(element) then return end local matrix = getElementMatrix(element) if not matrix then return end local offX = distX * matrix[1][1] + distY * matrix[2][1] + distZ * matrix[3][1] + 1 * matrix[4][1] local offY = distX * matrix[1][2] + distY * matrix[2][2] + distZ * matrix[3][2] + 1 * matrix[4][2] local offZ = distX * matrix[1][3] + distY * matrix[2][3] + distZ * matrix[3][3] + 1 * matrix[4][3] return offX, offY, offZ end
-
вообще не понимаю что куда отправлять.. как то так? function camStart(theVehicle, seat) local vModel = getElementModel(theVehicle) if (vModel == 421 ) then addCommandHandler("hide", function() local theVeh = getPedOccupiedVehicle(localPlayer) local getComponent = getVehicleComponents(theVeh) if (theVeh) then for k in pairs (getComponent) do local isVisible = getVehicleComponentVisible(theVeh, "bump_front_dummy") if (isVisible == true) then setVehicleComponentVisible(theVeh, "bump_front_dummy", false) end end end end ) addCommandHandler("show", function() local theVeh = getPedOccupiedVehicle(localPlayer) local getComponent = getVehicleComponents(theVeh) if (theVeh) then for k in pairs (getComponent) do local isVisible = getVehicleComponentVisible(theVeh, "bump_front_dummy") if (isVisible == false) then setVehicleComponentVisible(theVeh, "bump_front_dummy", true) end end end end ) end end addEventHandler("onClientPlayerVehicleEnter", getLocalPlayer(), camStart) function camStop(theVehicle, seat) removeCommandHandler( "show" ) removeCommandHandler( "hide" ) end addEventHandler("onClientPlayerVehicleExit", getLocalPlayer(), camStop) addEventHandler("onClientVehicleExplode", getRootElement(), camStop ) addEventHandler("onClientElementDestroy", getRootElement(), function () if getElementType(source) == "vehicle" and getPedOccupiedVehicle(getLocalPlayer()) == source then removeCommandHandler( "show" ) removeCommandHandler( "hide" ) end end) addEvent( "onGreeting", true ) addEventHandler( "onGreeting", localPlayer, camStart ) function greetingCommand ( playerSource ) triggerClientEvent ( playerSource, "onGreeting", playerSource ) end
-
Есть один интересный вопрос, который отделяет меня от реализации очень интересного проекта, прошу помощи. Предположим есть client only функция, а именно setVehicleComponentVisible. Соответственно когда я скрываю компонент это видно только мне. Могу я сделать так чтобы все игроки видели что я скрыл этот компонент?
-
Хронология событий такая: Включаю скрипт, нажимаю бинд - включается. Нажимаю еще раз - выключается. Все хорошо. Включаю у себя. Прошу другого игрока включить - не включается. Через несколько секунд включается само. И перестает выключаться с кнопки. И у меня и у игрока. Мистика какая-то.
-
Так это и есть весь код я меняю только время в таймерах, или добавляю еще таймеры. Но даже код в чистом виде как написал господин Memory имеет эти проблемы.
-
Спсибо большое за помощь! Но к сожалению оно так нормально и не работает. Первую минуту вроде все хорошо, потом оно перестает выключаться с кнопки. У других игроков включается через раз и тоже не выключается с кнопки... В плюс к этому получаю целую кучу ошибок в логах "Bad vehicle pointer"..
-
Теперь я окончательно запутался... Сделал все как написано под спойлером. Теперь сначала скрипт работает вроде бы нормально но только у одного человека, потом через какое-то время начинает работать у всех но при этом не выключается ни при нажатии кнопки ни при выходе из машины..
-
Так? on = 0 function onEnterVehicle () bindKey ( source, "k", "down", create ) end addEventHandler ( "onPlayerVehicleEnter", getRootElement(), onEnterVehicle ) function create ( thePlayer, player ) if getElementData( thePlayer, "on", 0 ) then setElementData( thePlayer, "on", 1 ) local vehicle = getPedOccupiedVehicle(player) timer1 = setTimer(function( playerVehicle ) setVehicleLightState ( playerVehicle, 0, 0 ) setTimer(function( playerVehicle ) setVehicleLightState ( playerVehicle, 0, 1 ) end, 50, 1, vehicle ) resetTimer(timer1) end, 500, 0, vehicle ); else setElementData( thePlayer, "on", 0 ) killTimer(timer1); end end это не работает.. вот такие ошибки получаю.. WARNING: Light\server.lua:11: Bad argument @ 'getElementData' [Expected bool at argument 3, got number '0']
-
Спасибо большое! Разобрался, все работает. Но столкнулся с новой проблемой. Функция работает только у одного игрока, то есть если у одного включено, включает другой, у первого пропадает. А так же если кто-то выходит с сервера то тоже таймер выключается. Это можно как-нибудь победить? on = 0 function onEnterVehicle () bindKey ( source, "k", "down", createStrab ) end addEventHandler ( "onPlayerVehicleEnter", getRootElement(), onEnterVehicle ) function create (player) if on == 0 then on = 1 local vehicle = getPedOccupiedVehicle(player) timer1 = setTimer(function( playerVehicle ) setVehicleLightState ( playerVehicle, 0, 0 ) setTimer(function( playerVehicle ) setVehicleLightState ( playerVehicle, 0, 1 ) end, 50, 1, vehicle ) resetTimer(timer1) end, 500, 0, vehicle ); else on=0 killTimer(timer1); end end function Exit () unbindKey ( source, "k", "down", create ) if on == 1 then on=0 killTimer(timer1); end end addEventHandler ( "onPlayerVehicleExit", getRootElement(), Exit ) function Explode () local driver = getVehicleOccupant ( source ) unbindKey ( driver, "k", "down", create ) if on == 1 then on=0 killTimer(timer1) end end addEventHandler ( "onVehicleExplode", getRootElement(), Explode ) function Destroy ( ) local driver = getVehicleOccupant ( source ) unbindKey ( driver, "k", "down", create ) if on == 1 then on=0 killTimer(timer1) end end addEventHandler ("onElementDestroy", getRootElement(), Destroy )
-
Вот полный код. Сам скрипт работает идеально без ошибок, но последние 2 функции не хотят. on = 0 function onEnterVehicle () bindKey ( source, "k", "down", create ) end addEventHandler ( "onPlayerVehicleEnter", getRootElement(), onEnterVehicle ) function create (player) if on == 0 then on = 1 local vehicle = getPedOccupiedVehicle(player) timer1 = setTimer(function( playerVehicle ) setVehicleLightState ( playerVehicle, 0, 0 ) setTimer(function( playerVehicle ) setVehicleLightState ( playerVehicle, 0, 1 ) end, 50, 1, vehicle ) resetTimer(timer1) end, 500, 0, vehicle ); else on=0 killTimer(timer1); end end function Exit () unbindKey ( source, "k", "down", create ) if on == 1 then on=0 killTimer(timer1); end end addEventHandler ( "onPlayerVehicleExit", getRootElement(), Exit ) function Explode () unbindKey ( source, "k", "down", create ) if on == 1 then on=0 killTimer(timer1) end end addEventHandler ( "onVehicleExplode", getRootElement(), Explode ) function Destroy () if getElementType(source) == "vehicle" and getPedOccupiedVehicle(getLocalPlayer()) == source then unbindKey ( source, "k", "down", create ) if on == 1 then on=0 killTimer(timer1) end end end addEventHandler ("onElementDestroy", getRootElement(), Destroy )
-
Приветствую, прошу помогите, не могу понять почему не работают функции Explode и Destroy, в других скриптах нечто подобное срабатывало (правда они были клиентские а этот серверный), а тут ни в какую. Причем функция Exit работает хорошо и не вызывает нареканий. function Exit () unbindKey ( source, "k", "down", create ) if on == 1 then on=0 killTimer(timer1) end end addEventHandler ( "onPlayerVehicleExit", getRootElement(), Exit ) function Explode () unbindKey ( source, "k", "down", create ) if on == 1 then on=0 killTimer(timer1) end end addEventHandler ( "onVehicleExplode", getRootElement(), Explode ) function Destroy () if getElementType(source) == "vehicle" and getPedOccupiedVehicle(getLocalPlayer()) == source then unbindKey ( source, "k", "down", create ) if on == 1 then on=0 killTimer(timer1) end end end addEventHandler ("onClientElementDestroy", getRootElement(), Destroy ) когда взрываю машину получаю ошибку в консоль server.lua:67: Bad 'player' pointer @ 'unbindKey'(1) когда дестрою машину получаю бесконечно повторяющуюся ошибку таймера (таймер настроен на бесконечное повторение с интервалом 500) простите за возможно глупый вопрос, я новичек в этом деле