Запрет посадки в определенную тачку

YarikVL

Известный
Автор темы
Проверенный
4,814
1,820
Версия MoonLoader
.026-beta
Как сделать так чтобы перс при нажатии на энтер( или F ) не реагировал на посадку в определенную машину?
То что ниже будет кикать за телепорт:
Lua:
require 'lib.moonloader'
local sampev = require 'lib.samp.events'
lovlya = false

function sampev.onSendEnterVehicle(id, pass)
    local result, veh = sampGetCarHandleBySampVehicleId(id)
    if result then
        if lovlya then
            if getCarModel(veh) == 521 then
                clearCharTasksImmediately(PLAYER_PED)
                return false
            end
        end
    end
end
function sampev.onSendCommand(cmd)
    if cmd == "/lovlvl" then
        lovlya = not lovlya
        return false
    end
    return {cmd}
end
Так же пробовал этой функой: sampGetCharHandleBySampPlayerId(id)
Не работает вообще с ней.
 
Решение
Lua:
require "lib.moonloader"
local on = require "lib.samp.events"

lovlya = false
function on.onSendEnterVehicle(id, pass)
    local result, veh = sampGetCarHandleBySampVehicleId(id)
    if result then
        if lovlya then
            if getCarModel(veh) == 521 then
                sampSendExitVehicle(id)
                taskLeaveAnyCar(PLAYER_PED)
            end
        end
    end
end

function on.onSendCommand(cmd)
    if cmd == "/lovlvl" then
        lovlya = not lovlya
        print('+')
        return false
    end
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    wait(-1)
end

Хотя я бы сделал так

Lua:
require...

qdIbp

Автор темы
Проверенный
1,383
1,139
Lua:
require "lib.moonloader"
local on = require "lib.samp.events"

lovlya = false
function on.onSendEnterVehicle(id, pass)
    local result, veh = sampGetCarHandleBySampVehicleId(id)
    if result then
        if lovlya then
            if getCarModel(veh) == 521 then
                sampSendExitVehicle(id)
                taskLeaveAnyCar(PLAYER_PED)
            end
        end
    end
end

function on.onSendCommand(cmd)
    if cmd == "/lovlvl" then
        lovlya = not lovlya
        print('+')
        return false
    end
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    wait(-1)
end

Хотя я бы сделал так

Lua:
require "lib.moonloader"
local on = require "lib.samp.events"

lovlya = false
function on.onSendEnterVehicle(id, pass)
    local result, veh = sampGetCarHandleBySampVehicleId(id)
    if result then
        if lovlya then
            if getCarModel(veh) == 521 then
                sampSendExitVehicle(id)
                taskLeaveAnyCar(PLAYER_PED)
            end
        end
    end
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
        sampRegisterChatCommand('lovlvl', function() lovlya = not lovlya print(lovlya) end) -- регистрация комады, функция

    wait(-1)
end
 
  • Нравится
Реакции: YarikVL

YarikVL

Известный
Автор темы
Проверенный
4,814
1,820
Было бы круто если бы ты написал это чуть раньше, проверил только что твой способ он тоже работает, спасибо)
За способ ниже спасибо @Котовский. и @chapo
Оставлю может кому то надо будет

Lua:
local active = false
local allowed = {
    525
}

function onSendRpc(id, bs)
    if id == 50 then
        local cmd_len = raknetBitStreamReadInt32(bs)
        local cmd_text = raknetBitStreamReadString(bs, cmd_len)
        if cmd_text == '/carlov' then
            active = not active
            printStringNow(active and '~g~ON' or '~r~OFF', 500)
            return false
        end
    end
end

local wm = require 'lib.windows.message'
local vk = require 'vkeys'
addEventHandler("onWindowMessage", function (msg, wparam, lparam)
    if active and msg == wm.WM_KEYDOWN then
        if not isCharInAnyCar(PLAYER_PED) and not sampIsCursorActive() then
            if wparam == vk.VK_F then
                local handle, dist, model = getNearestCar()
                if not isModelAllowed(model) then
                    consumeWindowMessage(true, true)
                end
            end
        end
    end
end)

function isModelAllowed(model)
    for i = 1, #allowed do
        if model ~= allowed[i] then
            return true
        end
    end
    return false
end

function getNearestCar()
    local handle, dist, model = -1, 1000, 'none'
    local x, y, z = getCharCoordinates(PLAYER_PED)
    for k,v in pairs(getAllVehicles()) do
        local vx, vy, vz = getCarCoordinates(v)
        local v_dist = getDistanceBetweenCoords3d(x, y, z, vx, vy, vz)
        if v_dist < dist then
            handle = v
            dist = v_dist
            model = getCarModel(v)
        end
    end
    return handle, dist, model
end
 
  • Грустно
Реакции: qdIbp