Jump to content

setElementData


Recommended Posts

setElementData ты применяешь на стороне сервера или клиента? Если на стороне клиента, то у тебя это и не будет работать т.к ты сделал эти данные не синхронизированными с сервером ( аргумент synchronize у тебя стоит на false ).

А если это на стороне сервера, то проверь элемент, возможно его не существует.

Link to comment
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

У тебя не определена переменная theVehicle на строке 10. И вообще я не понимаю что именно ты пытаешься сделать..

Link to comment

Если знаешь мод 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

Как то у тебя не так сделано, как нужно.

Я вообще не вижу смысла использовать элемент даты.

Сделай на стороне клиента 2 массива, где будут все цвета по умолчанию (для отката назад) и измененные цвета. Цвет устанавливай клиенсткой функцией setVehicleColor, чтобы тока ты мог его видеть (для превью).

И когда выбор всех цветов будет окончательным, то тогда и вызывай событие, которое находится на стороне сервера для изменения цветов с помощью функции setVehicleColor, чтобы все видели цвет, а не только ты.

Link to comment

Тогда вам придётся вызывать событие на стороне сервера буквально каждый раз, когда курсор на выборе цвета меняет положение, тогда конечно все игроки будут видеть изменение цвета :D Но это слишком для сервера, сервер ляжет, вообще я не вижу смысла этого делать. То что я написал до этого - это самый лучший вариант.

P.S Сделайте покраску в закрывающемся гараже, чтобы никто кроме вас не мог видеть :)

Link to comment

Вы уверенны что это нагрузочно для сервера?

Щас приведу примеры, обычно у сервера 170 fps, когда я меняю положение курсора fps прыгает до 300...

первоначально сделано что цвет для сервера меняется только когда отпускаешь кнопку мыши на цвете, думаете вернуть?

Link to comment

Представьте, что вы не одни на сервере, а ещё человек 50, которые выбирают цвет, вот и представьте себе, что будет с сервером.

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...