Sergey_Walter Posted May 8, 2013 Share Posted May 8, 2013 Что не так? Сначала запоминаю цвет: setElementData( theVehicle, "oldcolors", { getVehicleColor( theVehicle, true ) }, false ) потом узнаю: local colors = getElementData(veh, "oldcolors") setVehicleColor( veh, unpack(colors)) и вот такая ошибка: http://screenshot.su/show.php?img=7d364 ... 62a154.jpg Link to comment
Kenix Posted May 8, 2013 Share Posted May 8, 2013 setElementData ты применяешь на стороне сервера или клиента? Если на стороне клиента, то у тебя это и не будет работать т.к ты сделал эти данные не синхронизированными с сервером ( аргумент synchronize у тебя стоит на false ). А если это на стороне сервера, то проверь элемент, возможно его не существует. Link to comment
Sergey_Walter Posted May 8, 2013 Author Share Posted May 8, 2013 function colorPreview( veh, color1, color2, color3, color4 ) setVehicleColor( veh, color1[1], color1[2], color1[3], color2[1], color2[2], color2[3], color3[1], color3[2], color3[3], color4[1], color4[2], color4[3]) end addEvent("colorPreview", true) addEventHandler("colorPreview", getRootElement(), colorPreview) function endColorPreview( veh ) local colors = getElementData(veh, "oldcolors") setVehicleColor( veh, unpack(colors)) setElementData( theVehicle, "oldcolors", { getVehicleColor( theVehicle, true ) }, false ) end addEvent("colorEndPreview", true) addEventHandler("colorEndPreview", getRootElement(), endColorPreview) function tMoney(thePlayer, cost) exports.global:takeMoney( thePlayer, cost ) end addEvent( "tMoney", true ) addEventHandler ( "tMoney", getRootElement(), tMoney ) local sphere = createColSphere ( 1053.2170,-903.6371,42.5435, 3.0 ) function picker( thePlayer, matchingDimension ) if getElementType ( thePlayer ) == "player" then local theVehicle = getPedOccupiedVehicle(thePlayer) if theVehicle then local x,y,z = getElementPosition( theVehicle ) setCameraMatrix (thePlayer, 1056.9, -908.2, 48.3, x, y, z) setElementFrozen ( theVehicle, true ) triggerClientEvent(thePlayer, "paintWindow", root, theVehicle) setElementData( theVehicle, "oldcolors", { getVehicleColor( theVehicle, true ) }, false ) end end end addEventHandler ( "onColShapeHit", sphere, picker) function repaintVehicle(veh, col1, col2, col3, col4) col = { getVehicleColor( veh, true ) } local color1 = col1 or { col[1], col[2], col[3] } local color2 = col2 or { col[4], col[5], col[6] } local color3 = col3 or { col[7], col[8], col[9] } local color4 = col4 or { col[10], col[11], col[12] } if setVehicleColor( veh, color1[1], color1[2], color1[3], color2[1], color2[2], color2[3], color3[1], color3[2], color3[3], color4[1], color4[2], color4[3]) then exports['savevehicle-system']:saveVehicleMods(veh) end end addEvent("repaintVehicle", true) addEventHandler("repaintVehicle", getRootElement(), repaintVehicle) Про false/true я знаю, всё происходит на стороне сервера.. Link to comment
Kenix Posted May 8, 2013 Share Posted May 8, 2013 У тебя не определена переменная theVehicle на строке 10. И вообще я не понимаю что именно ты пытаешься сделать.. Link to comment
Sergey_Walter Posted May 8, 2013 Author Share Posted May 8, 2013 Если знаешь мод valhalla, сделал тему по смену цвета: http://screenshot.su/img/f0/e1/7a/f0e17 ... c908f2.jpg function colorPreview( veh, color1, color2, color3, color4 ) setVehicleColor( veh, color1[1], color1[2], color1[3], color2[1], color2[2], color2[3], color3[1], color3[2], color3[3], color4[1], color4[2], color4[3]) end addEvent("colorPreview", true) addEventHandler("colorPreview", getRootElement(), colorPreview) function endColorPreview( veh ) local colors = getElementData( veh, "oldcolors" ) setVehicleColor( veh, unpack( colors ) ) exports['anticheat-system']:changeProtectedElementDataEx( veh, "oldcolors", { getVehicleColor( veh, true ) }, false ) end addEvent("colorEndPreview", true) addEventHandler("colorEndPreview", getRootElement(), endColorPreview) function tMoney(thePlayer, cost) exports.global:takeMoney( thePlayer, cost ) end addEvent( "tMoney", true ) addEventHandler ( "tMoney", getRootElement(), tMoney ) local sphere = createColSphere ( 1053.2170,-903.6371,42.5435, 3.0 ) function picker( thePlayer, matchingDimension ) if getElementType ( thePlayer ) == "player" then local theVehicle = getPedOccupiedVehicle(thePlayer) if theVehicle then local x,y,z = getElementPosition( theVehicle ) setCameraMatrix (thePlayer, 1056.9, -908.2, 48.3, x, y, z) setElementFrozen ( theVehicle, true ) triggerClientEvent(thePlayer, "paintWindow", root, theVehicle) exports['anticheat-system']:changeProtectedElementDataEx( theVehicle, "oldcolors", { getVehicleColor( theVehicle, true ) }, false ) end end end addEventHandler ( "onColShapeHit", sphere, picker) function repaintVehicle(veh, col1, col2, col3, col4) col = { getVehicleColor( veh, true ) } local color1 = col1 or { col[1], col[2], col[3] } local color2 = col2 or { col[4], col[5], col[6] } local color3 = col3 or { col[7], col[8], col[9] } local color4 = col4 or { col[10], col[11], col[12] } if setVehicleColor( veh, color1[1], color1[2], color1[3], color2[1], color2[2], color2[3], color3[1], color3[2], color3[3], color4[1], color4[2], color4[3]) then exports['savevehicle-system']:saveVehicleMods(veh) end end addEvent("repaintVehicle", true) addEventHandler("repaintVehicle", getRootElement(), repaintVehicle) это типа превью цвета, если например игрок нажал отмена нужно вернуть старый цвет.. Цвет возвращается нормально, но ошибка мне эта не нравится.. Link to comment
Kenix Posted May 8, 2013 Share Posted May 8, 2013 Как то у тебя не так сделано, как нужно. Я вообще не вижу смысла использовать элемент даты. Сделай на стороне клиента 2 массива, где будут все цвета по умолчанию (для отката назад) и измененные цвета. Цвет устанавливай клиенсткой функцией setVehicleColor, чтобы тока ты мог его видеть (для превью). И когда выбор всех цветов будет окончательным, то тогда и вызывай событие, которое находится на стороне сервера для изменения цветов с помощью функции setVehicleColor, чтобы все видели цвет, а не только ты. Link to comment
Sergey_Walter Posted May 8, 2013 Author Share Posted May 8, 2013 Не ну эт не круто) Я хочу чтоб все видели когда меняется цвет) Лан сделаю массивы на стороне клиента, думаю проблемм не будет.. Link to comment
Kenix Posted May 8, 2013 Share Posted May 8, 2013 Тогда вам придётся вызывать событие на стороне сервера буквально каждый раз, когда курсор на выборе цвета меняет положение, тогда конечно все игроки будут видеть изменение цвета Но это слишком для сервера, сервер ляжет, вообще я не вижу смысла этого делать. То что я написал до этого - это самый лучший вариант. P.S Сделайте покраску в закрывающемся гараже, чтобы никто кроме вас не мог видеть Link to comment
Sergey_Walter Posted May 8, 2013 Author Share Posted May 8, 2013 Вы уверенны что это нагрузочно для сервера? Щас приведу примеры, обычно у сервера 170 fps, когда я меняю положение курсора fps прыгает до 300... первоначально сделано что цвет для сервера меняется только когда отпускаешь кнопку мыши на цвете, думаете вернуть? Link to comment
Kenix Posted May 8, 2013 Share Posted May 8, 2013 Представьте, что вы не одни на сервере, а ещё человек 50, которые выбирают цвет, вот и представьте себе, что будет с сервером. Link to comment
Sergey_Walter Posted May 8, 2013 Author Share Posted May 8, 2013 да туда максимум 2 человека поместятся http://screenshot.su/show.php?img=5d28d ... bcd696.jpg Link to comment
Kenix Posted May 8, 2013 Share Posted May 8, 2013 Конечно же решатете вы, а я просто написал как лучше. 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