Lua Скрытие скина около стены

Deeps

Участник
Автор темы
21
25
Не уверен, что до меня этого никто не сделал, но я не смог найти аналогов


Описание:
Скрипт скрывает скин, когда камера находится слишком близко. Удобно, если стоишь вплотную к стене

HideSkin (1).gif
 

Вложения

  • Hide Skin.lua
    1.8 KB · Просмотры: 176
Последнее редактирование:

Peresvet

Известный
375
126
Было... Но точно не на lua... Видел подобное в топе клео у "Brothers In Company" году в 2016-ом.
Полезно.
 
  • Нравится
Реакции: Vespan
D

deleted-user-422095

Гость

sep

Известный
673
76
прикрути визуальное удаление аксессуаров еще лутше будет
 
  • Нравится
Реакции: Fbianchi.exe

Deeps

Участник
Автор темы
21
25
Добавил визуальное скрытие надетых аксессуаров.

Но вместе с ними скрываются объекты, которые находятся очень близко к игроку. Не нашёл способа проверить прикреплены ли объекты к человеку, т.к ивент не прикрепление объекта уже не будет актуален, если перезагрузить скрипт
 
  • Нравится
Реакции: deleted-user-422095

Fbianchi.exe

Известный
606
191
Добавил визуальное скрытие надетых аксессуаров.

Но вместе с ними скрываются объекты, которые находятся очень близко к игроку. Не нашёл способа проверить прикреплены ли объекты к человеку, т.к ивент не прикрепление объекта уже не будет актуален, если перезагрузить скрипт
нормальная версия(спиздил отсюда)
Посмотри этот, там люди сделали нормальное скрытие аксов, прописав их иды. Мб можно сделать считывание идов аксов, которые надеты на персонаже.
 

ARMOR

kjor32 is legend
Модератор
4,852
6,082

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,778
11,221
p7tO3u0.gif


можно еще так сделать
только если альфа больше 0 и меньше 255 то не отобрается большинство объектов, тс и педы, хотя я мб что то сделал не так
Lua:
local ffi = require('ffi')
local sampev = require 'lib.samp.events'

local selfObjects = {}
local selfObjectsRemoved = false
local PED_ALPHA = 255
local PED_ALPHA_UPDATE = -1
local PED_ALPHA_UPDATE_TO255 = -1

function SetRwObjectAlpha(handle, alpha)
    local pedEn = getCharPointer(handle)
    if pedEn ~= 0 then
        ffi.cast("void (__thiscall *)(int, int)", 0x5332C0)(pedEn, alpha)
    end
end

function main()
    while not isSampAvailable() do wait(0) end
    while true do
        wait(0)
        local camX, camY, camZ = getActiveCameraCoordinates()
        local pedX, pedY, pedZ = getCharCoordinates(PLAYER_PED)
        if getDistanceBetweenCoords3d(camX, camY, camZ, pedX, pedY, pedZ) < 0.9 then
            if not selfObjectsRemoved then
                selfObjectsRemoved = true
                for k, v in pairs(selfObjects) do
                    AttachetObject(myid(), k):Remove()
                end
            end
            if PED_ALPHA_UPDATE == -1 then
                PED_ALPHA_UPDATE = os.clock()
            else
                PED_ALPHA = bringFloatTo(255, 0, PED_ALPHA_UPDATE, 1)
                SetRwObjectAlpha(PLAYER_PED, PED_ALPHA)
                printStringNow(PED_ALPHA, 10)
                PED_ALPHA_UPDATE_TO255 = -1
            end
        else
            if selfObjectsRemoved then
                selfObjectsRemoved = false
                for k, v in pairs(selfObjects) do
                    AttachetObject(myid(), k):Add(v)
                end
            end

            if PED_ALPHA_UPDATE_TO255 == -1 then
                PED_ALPHA_UPDATE_TO255 = os.clock()
            else
                PED_ALPHA = bringFloatTo(PED_ALPHA, 255, PED_ALPHA_UPDATE_TO255, 25)
                SetRwObjectAlpha(PLAYER_PED, PED_ALPHA)
                PED_ALPHA_UPDATE = -1
            end
        end
    end
end

function onScriptTerminate(s, q)
    if s == thisScript() then
        if not selfObjectsRemoved then
            for k, v in pairs(selfObjects) do
                AttachetObject(myid(), k):Add(v)
            end
        end

        if PED_ALPHA ~= 255 then
            SetRwObjectAlpha(PLAYER_PED, 255)
        end
    end
end

function myid()
    return select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))
end

function bringFloatTo(from, to, start_time, duration)
    local timer = os.clock() - start_time
    if timer >= 0.00 and timer <= duration then
        local count = timer / (duration / 100)
        return from + (count * (to - from) / 100), true
    end
    return (timer > duration) and to or from, false
end

function sampev.onSetPlayerAttachedObject(playerId, index, create, object)
    if playerId == select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)) then
        selfObjects[index] = {
            modelId = object.modelId,
            bone = object.bone,
            offset = object.offset,
            rotation = object.rotation,
            scale = object.scale,
            color1 = object.color1,
            color2 = object.color2
        }
    end
end

function AttachetObject(player, index)
    local class = {}

    function class:Add(data)
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt16(bs, playerId) -- playerId
        raknetBitStreamWriteInt32(bs, index) -- index
        raknetBitStreamWriteBool(bs,  true) -- create
        raknetBitStreamWriteInt32(bs, data.modelid) -- modelId
        raknetBitStreamWriteInt32(bs, data.bone) -- bone
        raknetBitStreamWriteFloat(bs, data.offset.x) -- offset x
        raknetBitStreamWriteFloat(bs, data.offset.y) -- offset y
        raknetBitStreamWriteFloat(bs, data.offset.z) -- offset z
        raknetBitStreamWriteFloat(bs, data.rotation.x) -- rotation x
        raknetBitStreamWriteFloat(bs, data.rotation.y) -- rotation y
        raknetBitStreamWriteFloat(bs, data.rotation.z)  -- rotation z
        raknetBitStreamWriteFloat(bs, data.scale.x) -- scale x
        raknetBitStreamWriteFloat(bs, data.scale.y) -- scale y
        raknetBitStreamWriteFloat(bs, data.scale.z) -- scale z
        raknetBitStreamWriteInt32(bs, data.color1) -- color 1
        raknetBitStreamWriteInt32(bs, data.color2) -- color 2
        raknetEmulRpcReceiveBitStream(113, bs)
        raknetDeleteBitStream(bs)
    end

    function class:Remove()
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt16(bs, playerId) -- playerId
        raknetBitStreamWriteInt32(bs, index) -- index
        raknetBitStreamWriteBool(bs,  false) -- create
        raknetEmulRpcReceiveBitStream(113, bs)
        raknetDeleteBitStream(bs)
    end

    return class
end
1649264247120.png
 
  • Нравится
Реакции: misterkent