Как добавить телепорт к маркеру?

reblader

Участник
Автор темы
58
1
Версия MoonLoader
Другое
Как добавить телепорт к этому коду?:
script_dependencies("CLEO", "SAMP", "SAMPFUNCS")

---------------------------------------------------------------------------

require "lib.moonloader"
require "lib.sampfuncs"

---------------------------------------------------------------------------

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    sampRegisterChatCommand("mycmd", cmd)

    while true do wait(0) end
end

function cmd(param)
    if isPlayerPlaying(playerHandle) then
        local posX, posY, posZ = getCharCoordinates(playerPed)
        local res, x, y, z = SearchMarker(posX, posY, posZ, 50.0, false)
        if res then
            sampAddChatMessage(string.format("Найден обычный маркер в координатах %.2f %.2f %.2f", x, y, z), -1)
        else
            res, x, y, z = SearchMarker(posX, posY, posZ, 50.0, true)
            if res then
                sampAddChatMessage(string.format("Найден гоночный маркер в координатах %.2f %.2f %.2f", x, y, z), -1)
            else
                sampAddChatMessage("Маркер не найден", -1)
            end
        end
    end
end

function SearchMarker(posX, posY, posZ, radius, isRace)
    local ret_posX = 0.0
    local ret_posY = 0.0
    local ret_posZ = 0.0
    local isFind = false

    for id = 0, 31 do
        local MarkerStruct = 0
        if isRace then MarkerStruct = 0xC7F168 + id * 56
        else MarkerStruct = 0xC7DD88 + id * 160 end
        local MarkerPosX = representIntAsFloat(readMemory(MarkerStruct + 0, 4, false))
        local MarkerPosY = representIntAsFloat(readMemory(MarkerStruct + 4, 4, false))
        local MarkerPosZ = representIntAsFloat(readMemory(MarkerStruct + 8, 4, false))

        if MarkerPosX ~= 0.0 or MarkerPosY ~= 0.0 or MarkerPosZ ~= 0.0 then
            if getDistanceBetweenCoords3d(MarkerPosX, MarkerPosY, MarkerPosZ, posX, posY, posZ) < radius then
                ret_posX = MarkerPosX
                ret_posY = MarkerPosY
                ret_posZ = MarkerPosZ
                isFind = true
                radius = getDistanceBetweenCoords3d(MarkerPosX, MarkerPosY, MarkerPosZ, posX, posY, posZ)
            end
        end
    end

    return isFind, ret_posX, ret_posY, ret_posZ
end

Как добавить телепорт к этому коду? То есть, игрок находит маркер и сразу телепортируется на него. (автор кода: SR_team)
 

Dmitriy Makarov

25.05.2021
Проверенный
2,513
1,140
Я тут один телепорт по маркеру у себя нашёл. Попробуй этот код отдельно.
Тут немного изменённая функция только. Нет радиуса и проверки на тип чекпоинта.
Lua:
-- main
sampRegisterChatCommand("dtpc", tpc)

-- Вне main
function tpc()
    _, x, y, z = SearchMarker()
    if not _ then
        return sampAddChatMessage("[DefaultTP] Не нашел серверной метки.", -1)
    end
    setCharCoordinates(PLAYER_PED, x, y, z)
end


function SearchMarker(posX, posY, posZ)
    local ret_posX = 0.0
    local ret_posY = 0.0
    local ret_posZ = 0.0
    local isFind = false
    for id = 0, 31 do
        local MarkerStruct = 0
        MarkerStruct = 0xC7F168 + id * 56
        local MarkerPosX = representIntAsFloat(readMemory(MarkerStruct + 0, 4, false))
        local MarkerPosY = representIntAsFloat(readMemory(MarkerStruct + 4, 4, false))
        local MarkerPosZ = representIntAsFloat(readMemory(MarkerStruct + 8, 4, false))
        if MarkerPosX ~= 0.0 or MarkerPosY ~= 0.0 or MarkerPosZ ~= 0.0 then
            ret_posX = MarkerPosX
            ret_posY = MarkerPosY
            ret_posZ = MarkerPosZ
            isFind = true
        end
    end
    return isFind, ret_posX, ret_posY, ret_posZ
end
 
  • Нравится
Реакции: reblader

reblader

Участник
Автор темы
58
1
этот код не работает вообще)

и к тому же пропадает все, когда игрок телепортируется, такое чувство, что игрок телепортируется в другой виртуальный мир, и обратно не возвращается
 

Dmitriy Makarov

25.05.2021
Проверенный
2,513
1,140
А если так? С бота вытащил. В боте работало всё.
Lua:
-- main
sampRegisterChatCommand("dtpc", tpc)

-- Вне main
function tpc()
    local result, x, y, z = SearchMarker()
    if result then
        setCharCoordinates(PLAYER_PED, x, y, z)
    end
end

function SearchMarker()
    local ret_posX = 0.0
    local ret_posY = 0.0
    local ret_posZ = 0.0
    local isFind = false
    for id = 0, 31 do
        local MarkerStruct = 0
        MarkerStruct = 0xC7F168 + id * 56
        local MarkerPosX = representIntAsFloat(readMemory(MarkerStruct + 0, 4, false))
        local MarkerPosY = representIntAsFloat(readMemory(MarkerStruct + 4, 4, false))
        local MarkerPosZ = representIntAsFloat(readMemory(MarkerStruct + 8, 4, false))
        if MarkerPosX ~= 0.0 or MarkerPosY ~= 0.0 or MarkerPosZ ~= 0.0 then
            ret_posX = MarkerPosX
            ret_posY = MarkerPosY
            ret_posZ = MarkerPosZ
            isFind = true
            isRace = true
        end
    end
    return isFind, ret_posX, ret_posY, ret_posZ
end
 
  • Нравится
Реакции: reblader

reblader

Участник
Автор темы
58
1
А если так? С бота вытащил. В боте работало всё.
Lua:
-- main
sampRegisterChatCommand("dtpc", tpc)

-- Вне main
function tpc()
    local result, x, y, z = SearchMarker()
    if result then
        setCharCoordinates(PLAYER_PED, x, y, z)
    end
end

function SearchMarker()
    local ret_posX = 0.0
    local ret_posY = 0.0
    local ret_posZ = 0.0
    local isFind = false
    for id = 0, 31 do
        local MarkerStruct = 0
        MarkerStruct = 0xC7F168 + id * 56
        local MarkerPosX = representIntAsFloat(readMemory(MarkerStruct + 0, 4, false))
        local MarkerPosY = representIntAsFloat(readMemory(MarkerStruct + 4, 4, false))
        local MarkerPosZ = representIntAsFloat(readMemory(MarkerStruct + 8, 4, false))
        if MarkerPosX ~= 0.0 or MarkerPosY ~= 0.0 or MarkerPosZ ~= 0.0 then
            ret_posX = MarkerPosX
            ret_posY = MarkerPosY
            ret_posZ = MarkerPosZ
            isFind = true
            isRace = true
        end
    end
    return isFind, ret_posX, ret_posY, ret_posZ
end
можешь бота скинуть? так тоже не работает..

смотри, игрок телепортируется и возвращается обратно, это с любым телепортом, а бывает, что один раз телепортируется и остается, там где телепортировался, но при этом все исчезает, и игрок не можешь брать пикап, чекпоинт, маркер...

и да, сможешь декомпилировать luac? а то у меня ошибку выдают, может так найду возможность
 

Dmitriy Makarov

25.05.2021
Проверенный
2,513
1,140
смотри, игрок телепортируется и возвращается обратно, это с любым телепортом, а бывает, что один раз телепортируется и остается, там где телепортировался, но при этом все исчезает, и игрок не можешь брать пикап, чекпоинт, маркер...
Ну тогда античит сервера не даёт, если с любым телепортом так. Других объяснений нет.
и да, сможешь декомпилировать luac? а то у меня ошибку выдают, может так найду возможность
Не, никогда этим не занимался. Не умею..
 
  • Нравится
Реакции: reblader