@@ -1393,6 +1393,19 @@ local function onVehicleResetted(gameVehicleID)
1393
1393
end
1394
1394
end
1395
1395
1396
+ -- ============================ ON VEHICLE COLOR CHANGED (CLIENT) ============================
1397
+ local function onVehicleColorChanged (gameVehicleID , index , paint )
1398
+ if not MPCoreNetwork .isMPSession () then return end -- do nothing if singleplayer
1399
+ local vehicle = getVehicleByGameID (gameVehicleID ) -- get vehicle table for this vehicle
1400
+ if vehicle and vehicle .serverVehicleString and vehicle .isLocal then -- If serverVehicleID not null and player own vehicle
1401
+
1402
+ local veh = be :getObjectByID (gameVehicleID ) -- get vehicle as object
1403
+ local paintData = MPHelpers .getColorsFromVehObj (veh )
1404
+ paintData [index ] = paint -- insert new paint at index as chosen from color picker
1405
+
1406
+ MPGameNetwork .send (' Op:' .. vehicle .serverVehicleString .. " :" .. jsonEncode (paintData ).. " " )
1407
+ end
1408
+ end
1396
1409
1397
1410
1398
1411
-- server events
@@ -1596,6 +1609,24 @@ local function onServerCameraSwitched(playerID, serverVehicleID)
1596
1609
vehicles [serverVehicleID ].spectators [playerID ] = true
1597
1610
end
1598
1611
1612
+ local function onServerVehicleColorChanged (serverVehicleID , data )
1613
+ local gameVehicleID = getGameVehicleID (serverVehicleID ) -- Get game ID
1614
+ local vehicle = getVehicleByGameID (gameVehicleID ) -- get vehicle table for this vehicle
1615
+ if vehicle and vehicle .serverVehicleString and not vehicle .isLocal and not vehicle .editQueue then -- If serverVehicleID not null and not player own vehicle
1616
+ if gameVehicleID then
1617
+ local veh = be :getObjectByID (gameVehicleID ) -- Get associated vehicle
1618
+ if veh then
1619
+ local paint = jsonDecode (data ) -- Decoded data
1620
+ if paint then -- if there's paint data
1621
+ veh :queueLuaCommand (" extensions.hook(\" onBeamMPVehicleColorChange\" )" )
1622
+ for k , v in pairs (paint ) do -- apply paint
1623
+ extensions .core_vehicle_manager .liveUpdateVehicleColors (gameVehicleID , veh , k , v )
1624
+ end
1625
+ end
1626
+ end
1627
+ end
1628
+ end
1629
+ end
1599
1630
1600
1631
local HandleNetwork = {
1601
1632
[' s' ] = function (rawData ) -- spawn
@@ -1652,6 +1683,15 @@ local HandleNetwork = {
1652
1683
else
1653
1684
-- public version has missing playerID
1654
1685
end
1686
+ end ,
1687
+ [' p' ] = function (rawData ) -- live paint update
1688
+ local serverVehicleID , data = string.match (rawData ," ^(%d+%-%d+)%:(%[.+%])" ) -- '0-0:[jsonstring]'
1689
+
1690
+ if serverVehicleID ~= nil then
1691
+ onServerVehicleColorChanged (serverVehicleID , data )
1692
+ else
1693
+ log (' E' , " HandleNetwork" , " Color pattern match failed" )
1694
+ end
1655
1695
end
1656
1696
}
1657
1697
@@ -2258,6 +2298,7 @@ M.onVehicleSpawned = onVehicleSpawned
2258
2298
M .onVehicleDestroyed = onVehicleDestroyed
2259
2299
M .onVehicleSwitched = onVehicleSwitched
2260
2300
M .onVehicleResetted = onVehicleResetted
2301
+ M .onVehicleColorChanged = onVehicleColorChanged
2261
2302
M .onPlayerLeft = onPlayerLeft
2262
2303
M .onClientPostStartMission = onDisconnect
2263
2304
M .onUIInitialised = onUIInitialised
0 commit comments