Seddo Posted August 18, 2014 Share Posted August 18, 2014 Скиньте пожалуйста полный код. Вот полный код. Сам скрипт работает идеально без ошибок, но последние 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 ) Link to comment
Memory Posted August 18, 2014 Share Posted August 18, 2014 В функции destroy ты получаешь транспорт localPlayer'а, замени на игрока. + ты анбиндишь source'у, но source авто, получи аккупанта через getVehicleOccupant и анбиндь ему. Link to comment
lcd12321 Posted August 19, 2014 Share Posted August 19, 2014 Есть определенный ресурс, в котором есть клиентская и серверная часть. Как получить данные клиентской части с серверной? Link to comment
Luc1feR Posted August 19, 2014 Share Posted August 19, 2014 Есть определенный ресурс, в котором есть клиентская и серверная часть. Как получить данные клиентской части с серверной? triggerClientEvent Link to comment
lcd12321 Posted August 19, 2014 Share Posted August 19, 2014 А как получить число с определенным количеством цифр после запятой? Например 5.74523 в 5.75? Link to comment
TheNormalnij Posted August 19, 2014 Share Posted August 19, 2014 return string.format( '%.2f', value ) Link to comment
Seddo Posted August 20, 2014 Share Posted August 20, 2014 В функции destroy ты получаешь транспорт localPlayer'а, замени на игрока. + ты анбиндишь source'у, но source авто, получи аккупанта через getVehicleOccupant и анбиндь ему. Спасибо большое! Разобрался, все работает. Но столкнулся с новой проблемой. Функция работает только у одного игрока, то есть если у одного включено, включает другой, у первого пропадает. А так же если кто-то выходит с сервера то тоже таймер выключается. Это можно как-нибудь победить? 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 ) Link to comment
Memory Posted August 20, 2014 Share Posted August 20, 2014 Это из-за переменной on. Ты переделал код с клиента на сервер, поэтому она изменяется теперь при каждом включении функции любым игроком. Используй setElementData, например, setElementData( thePlayer, "on", 1 или 0 ), и делай проверку соответственно через getElementData. Link to comment
Seddo Posted August 20, 2014 Share Posted August 20, 2014 \ Используй setElementData, например, setElementData( thePlayer, "on", 1 или 0 ), и делай проверку соответственно через getElementData. Так? 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'] Link to comment
Elengar Posted August 21, 2014 Share Posted August 21, 2014 Так? 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'] Оформляй код тегом lua, а не code. Предупреждение там потому, что getElementData возвращает значение, и его нужно сравнивать с чем-нибудь, например, вот так if getElementData( thePlayer, "on" ) == 0 then а не в третий аргумент сравниваемое пихать. Link to comment
Memory Posted August 21, 2014 Share Posted August 21, 2014 Так? ... Зачем ты в create вставил ещё thePlayer, у тебя уже есть player. Вобщем вот так должно быть. Вместо точек вставляй код, не стал разбираться с твоими таймерами. function onEnterVehicle () bindKey ( source, "k", "down", create ) setElementData ( source, "on", 0 ) end addEventHandler ( "onPlayerVehicleEnter", getRootElement(), onEnterVehicle ) function create (player) local state = getElementData ( player, "on" ) if ( state == 0 ) then setElementData ( player, "on", 1 ) ... else setElementData ( player, "on", 0 ) ... end end function Exit () unbindKey ( source, "k", "down", create ) if ( getElementData ( source, "on" ) == 1 ) then setElementData ( source, "on", 0 ) killTimer(timer1); end end addEventHandler ( "onPlayerVehicleExit", getRootElement(), Exit ) function Explode () local driver = getVehicleOccupant ( source ) unbindKey ( driver, "k", "down", create ) if ( getElementData ( driver, "on" ) == 1 ) then setElementData ( driver, "on", 0 ) killTimer(timer1) end end addEventHandler ( "onVehicleExplode", getRootElement(), Explode ) function Destroy () if ( getElementType(source) == "vehicle" ) then local driver = getVehicleOccupant ( source ) unbindKey ( driver, "k", "down", create ) if ( getElementData ( driver, "on" ) == 1 ) then setElementData ( driver, "on", 0 ) killTimer(timer1) end end end addEventHandler ("onElementDestroy", getRootElement(), Destroy ) + в фукнции Destroy не хватало проверки, что уничтоженный элемент является траспортом. Link to comment
lcd12321 Posted August 21, 2014 Share Posted August 21, 2014 Как нарисовать текст, который будет показываться не на "экране", а в мире ( например на здании )? Link to comment
Kernell Posted August 21, 2014 Share Posted August 21, 2014 Как нарисовать текст, который будет показываться не на "экране", а в мире ( например на здании )? С помощью dxCreateRenderTarget и dxDrawMaterialLine3D. Там кстати пример по твою душу, только dxDrawImage заменить. Link to comment
lcd12321 Posted August 21, 2014 Share Posted August 21, 2014 Как нарисовать текст, который будет показываться не на "экране", а в мире ( например на здании )? С помощью dxCreateRenderTarget и dxDrawMaterialLine3D. Там кстати пример по твою душу, только dxDrawImage заменить. А как сделать черный фон прозрачным? Link to comment
Kernell Posted August 21, 2014 Share Posted August 21, 2014 withAlpha поставить на true Link to comment
lcd12321 Posted August 21, 2014 Share Posted August 21, 2014 А что можно делать со стандартными объектами на карте? ( кроме удаления ) Link to comment
Kernell Posted August 21, 2014 Share Posted August 21, 2014 Спроси лучше, что ты хочешь с ними делать, а мы скажем, можно это или нельзя Link to comment
lcd12321 Posted August 21, 2014 Share Posted August 21, 2014 Спроси лучше, что ты хочешь с ними делать, а мы скажем, можно это или нельзя Ну например менять угол Link to comment
Other Languages Moderators Disinterpreter Posted August 21, 2014 Other Languages Moderators Share Posted August 21, 2014 Спроси лучше, что ты хочешь с ними делать, а мы скажем, можно это или нельзя Ну например менять угол setElementRotation? Link to comment
lcd12321 Posted August 21, 2014 Share Posted August 21, 2014 А как получить element например дома Cj? Ты наверное подумал о объектах, которые создаются, а я имел ввиду объекты, которые уже находятся на карте со времен сингл-плеера Link to comment
lcd12321 Posted August 23, 2014 Share Posted August 23, 2014 Как сделать, чтобы после первой анимации плавно шла вторая? Link to comment
Seddo Posted August 24, 2014 Share Posted August 24, 2014 Вобщем вот так должно быть. Вместо точек вставляй код, не стал разбираться с твоими таймерами. function onEnterVehicle () bindKey ( source, "k", "down", create ) setElementData ( source, "on", 0 ) end addEventHandler ( "onPlayerVehicleEnter", getRootElement(), onEnterVehicle ) function create (player) local state = getElementData ( player, "on" ) if ( state == 0 ) then setElementData ( player, "on", 1 ) ... else setElementData ( player, "on", 0 ) ... end end function Exit () unbindKey ( source, "k", "down", create ) if ( getElementData ( source, "on" ) == 1 ) then setElementData ( source, "on", 0 ) killTimer(timer1); end end addEventHandler ( "onPlayerVehicleExit", getRootElement(), Exit ) function Explode () local driver = getVehicleOccupant ( source ) unbindKey ( driver, "k", "down", create ) if ( getElementData ( driver, "on" ) == 1 ) then setElementData ( driver, "on", 0 ) killTimer(timer1) end end addEventHandler ( "onVehicleExplode", getRootElement(), Explode ) function Destroy () if ( getElementType(source) == "vehicle" ) then local driver = getVehicleOccupant ( source ) unbindKey ( driver, "k", "down", create ) if ( getElementData ( driver, "on" ) == 1 ) then setElementData ( driver, "on", 0 ) killTimer(timer1) end end end addEventHandler ("onElementDestroy", getRootElement(), Destroy ) + в фукнции Destroy не хватало проверки, что уничтоженный элемент является траспортом. Теперь я окончательно запутался... Сделал все как написано под спойлером. Теперь сначала скрипт работает вроде бы нормально но только у одного человека, потом через какое-то время начинает работать у всех но при этом не выключается ни при нажатии кнопки ни при выходе из машины.. Link to comment
lcd12321 Posted August 25, 2014 Share Posted August 25, 2014 Как получить координаты переда машины Link to comment
TheNormalnij Posted August 25, 2014 Share Posted August 25, 2014 https://wiki.multitheftauto.com/wiki/Server_Scripting_Functions#Ped_functions https://wiki.multitheftauto.com/wiki/Server_Scripting_Functions#Element_functions Link to comment
lcd12321 Posted August 25, 2014 Share Posted August 25, 2014 А по точней есть ли такая функция или нет? Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now