Изменение скорости транспорта

sVor

Активный
Автор темы
169
92
Версия MoonLoader
.026-beta
Приветствую. Если ли возможность устанавливать скорость транспорту, в котором находится игрок? Если да, то каким образом?
 
Решение
Первый способ через синхру для рванок
Lua:
        local data = samp_create_sync_data('vehicle')
        data.vehicleId = ид_машины
        data.position.x, data.position.y, data.position.z = getCarCoordinates(veh)
        data.moveSpeed.x, data.moveSpeed.y, data.moveSpeed.z = 0, 0, 0
     
        --сама функция уникальна для нескольких типов даты
        function samp_create_sync_data(sync_type, copy_from_player)
    local ffi = require 'ffi'
    local sampfuncs = require 'sampfuncs'
    -- from SAMP.Lua
    local raknet = require 'samp.raknet'
    require 'samp.synchronization'

    copy_from_player = copy_from_player or true
    local sync_traits = {
        player = {'PlayerSyncData', raknet.PACKET.PLAYER_SYNC...

UBP

Известный
360
223
Первый способ через синхру для рванок
Lua:
        local data = samp_create_sync_data('vehicle')
        data.vehicleId = ид_машины
        data.position.x, data.position.y, data.position.z = getCarCoordinates(veh)
        data.moveSpeed.x, data.moveSpeed.y, data.moveSpeed.z = 0, 0, 0
     
        --сама функция уникальна для нескольких типов даты
        function samp_create_sync_data(sync_type, copy_from_player)
    local ffi = require 'ffi'
    local sampfuncs = require 'sampfuncs'
    -- from SAMP.Lua
    local raknet = require 'samp.raknet'
    require 'samp.synchronization'

    copy_from_player = copy_from_player or true
    local sync_traits = {
        player = {'PlayerSyncData', raknet.PACKET.PLAYER_SYNC, sampStorePlayerOnfootData},
        vehicle = {'VehicleSyncData', raknet.PACKET.VEHICLE_SYNC, sampStorePlayerIncarData},
        passenger = {'PassengerSyncData', raknet.PACKET.PASSENGER_SYNC, sampStorePlayerPassengerData},
        aim = {'AimSyncData', raknet.PACKET.AIM_SYNC, sampStorePlayerAimData},
        trailer = {'TrailerSyncData', raknet.PACKET.TRAILER_SYNC, sampStorePlayerTrailerData},
        unoccupied = {'UnoccupiedSyncData', raknet.PACKET.UNOCCUPIED_SYNC, nil},
        bullet = {'BulletSyncData', raknet.PACKET.BULLET_SYNC, nil},
        spectator = {'SpectatorSyncData', raknet.PACKET.SPECTATOR_SYNC, nil}
    }
    local sync_info = sync_traits[sync_type]
    local data_type = 'struct ' .. sync_info[1]
    local data = ffi.new(data_type, {})
    local raw_data_ptr = tonumber(ffi.cast('uintptr_t', ffi.new(data_type .. '*', data)))
    -- copy player's sync data to the allocated memory
    if copy_from_player then
        local copy_func = sync_info[3]
        if copy_func then
            local _, player_id
            if copy_from_player == true then
                _, player_id = sampGetPlayerIdByCharHandle(PLAYER_PED)
            else
                player_id = tonumber(copy_from_player)
            end
            copy_func(player_id, raw_data_ptr)
        end
    end
    -- function to send packet
    local func_send = function()
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, sync_info[2])
        raknetBitStreamWriteBuffer(bs, raw_data_ptr, ffi.sizeof(data))
        raknetSendBitStreamEx(bs, sampfuncs.HIGH_PRIORITY, sampfuncs.UNRELIABLE_SEQUENCED, 1)
        raknetDeleteBitStream(bs)
    end
    -- metatable to access sync data and 'send' function
    local mt = {
        __index = function(t, index)
            return data[index]
        end,
        __newindex = function(t, index, value)
            data[index] = value
        end
    }
    return setmetatable({send = func_send}, mt)
end
function getNearCarToCenter(radius)
    local arr = {}
    local sx, sy = getScreenResolution()
    for _, car in ipairs(getAllVehicles()) do
        if isCarOnScreen(car) and getDriverOfCar(car) ~= playerPed then
            local carX, carY, carZ = getCarCoordinates(car)
            local cX, cY = convert3DCoordsToScreen(carX, carY, carZ)
            local distBetween2d = getDistanceBetweenCoords2d(sx / 2, sy / 2, cX, cY)
            if distBetween2d <= tonumber(radius and radius or sx) then
                table.insert(arr, {distBetween2d, car})
            end
        end
    end
    if #arr > 0 then
        table.sort(arr, function(a, b) return (a[1] < b[1]) end)
        return arr[1][2]
    end
    return nil
end
function sampev.onSetVehiclePosition()
    if dissync then
        return false
    end
end

Способ 2 для спидхаков
Код:
local samem = require 'SAMemory' -- подключаем библиотеку
local mult = множитель скорости
local limit = лимит скорости

function main()
    while true do
        wait(0)
        local veh = player_vehicle[0] -- получаем машину
        if veh ~= samem.nullptr then -- проверяем существует ли она
            while veh ~= samem.nullptr do -- пока машина есть
                local new_speed = veh.vMoveSpeed * mult -- задаем переменной скорость
                if new_speed:magnitude() <= limit then -- проверяем на лимит
                    veh.vMoveSpeed = new_speed -- задаем скорость
                end
                veh = veh.pTrailer
            end
        end
    end
end
 
  • Нравится
Реакции: sVor