Помощь в изменении скриптов

FYP

Известный
Автор темы
Администратор
1,758
5,742
Здесь вы можете попросить других пользователей внести какие-то небольшие изменения в скрипт, например, изменить активацию.
Для вопросов по программированию и разработке на форуме есть отдельная категория Разработка.

Рекомендации:
  1. Не просите о редактировании .asi, .sf, .luac, .dll, .exe и прочих файлов, не поддающихся простой декомпиляции. Скрипты формата .ahk (AutoHotKey), .lua (Lua/MoonLoader) и .cs (CLEO) легко поддаются изменению.
  2. Сообщения по типу "спасибо, помог" по правилам форума считаются флудом и скорее всего будут удалены. Если вам помогли, вы можете нажать кнопку Мне нравится под ответом - это даст понять, что ответ верный.
  3. За злонамеренное распространение вредоносного ПО - перманентный бан. Имейте это в виду.
Удаление копирайтов является нарушением авторских прав, если автор не дал на это своего разрешения. Правила BlastHack запрещают нарушать авторские права, поэтому если вам нужно их убрать - обращайтесь к автору.
 
Последнее редактирование:

dddfdddsdfgsd

Новичок
12
1
Скрипт на отображения времени до следующего надевания автоармора
Нужно сделать :
проверку, если армора меньше 240 но больше 40 то когда на таймере в ориг скрипте рисует 3 сек то автоматом пишется команда /armour
 

Вложения

  • armour.lua
    1.4 KB · Просмотры: 3

dddfdddsdfgsd

Новичок
12
1
Скрипт на отображения времени до следующего надевания автоармора
Нужно сделать :
проверку, если армора меньше 240 но больше 40 то когда на таймере в ориг скрипте рисует 3 сек то автоматом пишется команда /armour
up
 

976h

Активный
119
41
Надо добавить, что бы при нажатии кнопки "Погоня", писало /pursuit (id) выбраного игрока

Lua:
require 'lib.moonloader'
local sampev = require 'samp.events'

local tag = '{7FFF00}Список преступников'
local delay = 35
local wanted = {}
local wlist = false

function main()

    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    
    local _, idClient = sampGetPlayerIdByCharHandle(PLAYER_PED)
    
    local function getPing()
        return(sampGetPlayerPing(idClient))
    end

    sampRegisterChatCommand('wanted', function ()
    
        wanted = {}
        wlist = true
        lua_thread.create(function()
        

            
            for i = 1, 6 do
                sampSendChat('/wanted ' .. i)
                wait(150)
            end
            
            wait(getPing() + delay)
            wlist = false
            sampSendDialogResponse(1780, 0, false, false)
            table.sort(wanted, function (k1, k2) return k1[3] > k2[3] end )
            local dtext = '{FFFFFF}'
            
            for k, _ in ipairs(wanted) do
                dtext = dtext .. string.format('{FFFFFF}%s{FFFFFF}({00FF00}%s{FFFFFF})\t{FFFFFF}%s уровень\t%s\n', wanted[k][1], wanted[k][2], wanted[k][3], wanted[k][4])
            end

            sampShowDialog(1, tag, 'Ник\tУровень розыска\tРасстояние\n' .. dtext, 'Погоня', 'Отмена', DIALOG_STYLE_TABLIST_HEADERS)
        end)     
    end)
    
    function sampev.onShowDialog(dialogid, style, title, button1, button2, text)
        if dialogid == 1780 and wlist then
            local text = string.gsub(text, '%{......}', '')
            text = string.gsub(text, 'Ник%s+Уровень розыска%s+Расстояние\n', '')

            for line in string.gmatch(text, '[^\n]+') do
                local nick, id, lvl, dist = string.match(line, '(%w+_%w+)%((%d+)%)%s+(%d) уровень%s+%[(.+)%]')
                dist = string.gsub(dist, 'в интерьере', '{FF0000}НЕДОСТУПЕН')
                dist = string.gsub(dist, 'м%.', 'м')
                table.insert(wanted, {nick, id, lvl, dist})   
            end
            return false
        end
    end
    
    function sampev.onServerMessage(_, text)
        if text:find('^%[Ошибка%] {FFFFFF}Игроков с таким уровнем розыска нету!') and wlist then return false end
    end
end
 

Bublik_95

Новичок
11
2
Можете сделать так чтобы когда я пишу /hpme показывалось только моё хп, а когда пишу /hpal показывалось и моё и чужоё хп (всех игроков в радиусе который указан в коде скрипта) и последняя команда /hpoff (не показывать ни чужое, ни моё хп)
Понимаю, тема сложная, но хелп пж
 

Вложения

  • [L] HPHud НА ВСЕХ.lua
    2.3 KB · Просмотры: 3

976h

Активный
119
41
Можете сделать так чтобы когда я пишу /hpme показывалось только моё хп, а когда пишу /hpal показывалось и моё и чужоё хп (всех игроков в радиусе который указан в коде скрипта) и последняя команда /hpoff (не показывать ни чужое, ни моё хп)
Понимаю, тема сложная, но хелп пж
Lua:
require 'lib.moonloader'

script_author('TyphoonWw')
script_name('HP-Hud')
script_version('1.0a pre-beta final release optimus mega prime')










vseh            = true
distt            = 100
razmer_teksta     = 8
cvet_hp_igroka     = 0xAAFF2222
cvet_ap_igroka     = 0xFFFFFFFF
cvet_hp_mashini    = 0xFFAAAAFF
shrift             = 'Verdana'












local font_flag     = require('moonloader').font_flag
local font_name     = shrift
local font             = renderCreateFont(font_name, razmer_teksta, font_flag.BOLD + font_flag.SHADOW)


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

    sampRegisterChatCommand("hpme", function()
        showMyHP = true
        showAllHP = false
    end)

    sampRegisterChatCommand("hpal", function()
        showMyHP = true
        showAllHP = true
    end)

    sampRegisterChatCommand("hpoff", function()
        showMyHP = false
        showAllHP = false
    end)

    while true do
        wait(0)

        if showMyHP then
            displayPlayerHP(PLAYER_PED)
        end

        if showAllHP then
            forAll()
        end
    end
end

function displayPlayerHP(ped)
    local pX, pY, pZ = getCharCoordinates(ped)
    local ppX, ppY = convert3DCoordsToScreen(pX, pY, pZ)
    
    if getCharHealth(ped) > 0 then
        renderFontDrawText(font, getCharHealth(ped), ppX, ppY, cvet_hp_igroka)
    end

    if getCharArmour(ped) > 0 then
        renderFontDrawText(font, getCharArmour(ped), ppX, ppY + 10, cvet_ap_igroka)
    end

    if isCharInAnyCar(ped) then
        local car = storeCarCharIsInNoSave(ped)
        renderFontDrawText(font, getCarHealth(car), ppX, ppY - 10, cvet_hp_mashini)
    end
end

function forAll()
    local pX, pY, pZ = getCharCoordinates(PLAYER_PED)
    for id = 0, sampGetMaxPlayerId(true) do
        local result, pedd = sampGetCharHandleBySampPlayerId(id)
        if result and pedd ~= PLAYER_PED then
            local spX, spY, spZ = getCharCoordinates(pedd)
            if isPointOnScreen(spX, spY, spZ) and getDistanceBetweenCoords3d(spX, spY, spZ, pX, pY, pZ) <= distt then
                displayPlayerHP(pedd)
            end
        end
    end
end
 
  • Нравится
Реакции: Bublik_95

dddfdddsdfgsd

Новичок
12
1
Скрипт на отображения времени до следующего надевания автоармора
Нужно сделать :
проверку, если армора меньше 240 но больше 40 то когда на таймере в ориг скрипте рисует 3 сек то автоматом пишется команда /armour
up
 

AntonAnton123

Активный
161
80
Lua:
require 'lib.moonloader'

script_author('TyphoonWw')
script_name('HP-Hud')
script_version('1.0a pre-beta final release optimus mega prime')










vseh            = true
distt            = 100
razmer_teksta     = 8
cvet_hp_igroka     = 0xAAFF2222
cvet_ap_igroka     = 0xFFFFFFFF
cvet_hp_mashini    = 0xFFAAAAFF
shrift             = 'Verdana'












local font_flag     = require('moonloader').font_flag
local font_name     = shrift
local font             = renderCreateFont(font_name, razmer_teksta, font_flag.BOLD + font_flag.SHADOW)


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

    sampRegisterChatCommand("hpme", function()
        showMyHP = true
        showAllHP = false
    end)

    sampRegisterChatCommand("hpal", function()
        showMyHP = true
        showAllHP = true
    end)

    sampRegisterChatCommand("hpoff", function()
        showMyHP = false
        showAllHP = false
    end)

    while true do
        wait(0)

        if showMyHP then
            displayPlayerHP(PLAYER_PED)
        end

        if showAllHP then
            forAll()
        end
    end
end

function displayPlayerHP(ped)
    local pX, pY, pZ = getCharCoordinates(ped)
    local ppX, ppY = convert3DCoordsToScreen(pX, pY, pZ)
   
    if getCharHealth(ped) > 0 then
        renderFontDrawText(font, getCharHealth(ped), ppX, ppY, cvet_hp_igroka)
    end

    if getCharArmour(ped) > 0 then
        renderFontDrawText(font, getCharArmour(ped), ppX, ppY + 10, cvet_ap_igroka)
    end

    if isCharInAnyCar(ped) then
        local car = storeCarCharIsInNoSave(ped)
        renderFontDrawText(font, getCarHealth(car), ppX, ppY - 10, cvet_hp_mashini)
    end
end

function forAll()
    local pX, pY, pZ = getCharCoordinates(PLAYER_PED)
    for id = 0, sampGetMaxPlayerId(true) do
        local result, pedd = sampGetCharHandleBySampPlayerId(id)
        if result and pedd ~= PLAYER_PED then
            local spX, spY, spZ = getCharCoordinates(pedd)
            if isPointOnScreen(spX, spY, spZ) and getDistanceBetweenCoords3d(spX, spY, spZ, pX, pY, pZ) <= distt then
                displayPlayerHP(pedd)
            end
        end
    end
end
своё хп нормально показывает, машин хп нормально, но вот других игроков всё время 1000 хп показывает, то есть не работает
 

kalonne

Новичок
3
0
Помогите мне, пожалуйста. Я написал мини-скрипт, но он не запускается автоматически. Скрипт на основе Lua.
Код:
require 'lib.moonloader'

local sampev = require 'lib.samp.events'



script_name("Helper")

script_author("Sigma228")

script_version("0.2 beta test")

script_description("Пример использования MoonLoader для работы с SAMP")



local color_red = 0xFFFF0000 -- Красный цвет

local script_initialized = false



function main()

    -- Выводим информацию о скрипте только один раз при запуске

    if not script_initialized then

        sampAddChatMessage(script.this.name .. ' v' .. script.this.version, color_red)

        sampAddChatMessage('Автор: ' .. script.this.authors[1], color_red)

        script_initialized = true

    end



    while not isSampAvailable() do wait(100) end



    while true do

        wait(0)

        if wasKeyPressed(VK_F1) then

            sampSendChat("/rec 1") -- Отправляем команду /rec 1 в чат при нажатии F1

        end

    end

end
[/CODE]
 
Последнее редактирование:

Митя Евгеньевич

Известный
347
135
Помогите мне, пожалуйста. Я написал мини-скрипт, но он не запускается автоматически. Скрипт на основе Lua.
Код:
require 'lib.moonloader'

local sampev = require 'lib.samp.events'



script_name("Helper")

script_author("Sigma228")

script_version("0.2 beta test")

script_description("Пример использования MoonLoader для работы с SAMP")



local color_red = 0xFFFF0000 -- Красный цвет

local script_initialized = false



function main()

    -- Выводим информацию о скрипте только один раз при запуске

    if not script_initialized then

        sampAddChatMessage(script.this.name .. ' v' .. script.this.version, color_red)

        sampAddChatMessage('Автор: ' .. script.this.authors[1], color_red)

        script_initialized = true

    end



    while not isSampAvailable() do wait(100) end



    while true do

        wait(0)

        if wasKeyPressed(VK_F1) then

            sampSendChat("/rec 1") -- Отправляем команду /rec 1 в чат при нажатии F1

        end

    end

end
[/CODE]
1. Проверка if not script_initialized then имхо бесполезна, поскольку скрипт самостоятельно не перезагружается. При ручной перезагрузке скрипта переменная script_initialized примит снова статус false и код в мэин блоке выполнится, аналогично будет себя вести код без этой проверки.
2. Проверку (цикл while not IsSampAvailable) на инициализацию сампа следует вставить над выводимым текстом в чат, иначе функция сначала делает запрос на получение структуры чата с последующей отправкой сообщения, а только потом идёт проверка на то, запущен ли самп вообще (но оба варианта почему-то рабочие, ладно).
3. Вместо script.this.authors[1], используемой во втором sampAddChatMessage, дабы избежать проблемы с attempt to concatenate field попробуй unpack(thisScript().authors)
4. Могу предположить, что выполняемая в цикле команда /rec не является серверной, а вызывается клиентским скриптом/плагином. Соответственно sampSendChat следует заменить на sampProcessChatInput.

Lua:
require 'lib.moonloader'
script_name("Helper")
script_version("0.2 beta test")
script_author("Sigma228")
script_description("Пример использования MoonLoader для работы с SAMP")
local color_red = 0xFFFF0000

function main()
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage(script.this.name .. ' v' .. script.this.version, color_red)
    sampAddChatMessage("Автор: " ..unpack(thisScript().authors), color_red)
    while true do 
        wait(0)
        if wasKeyPressed(VK_F1) then
            sampProcessChatInput("/rec 1")
        end
    end
end
 
  • Нравится
Реакции: kalonne

kalonne

Новичок
3
0
Как исправить ошибку загрузки текстуры карты? Если можно, подправьте код, так как, возможно, я написал что-то неправильное. Я хочу реализовать возможность визуального телепортирования по метке или по координатам. Играю я на аризоне
Код:
require 'lib.moonloader'
local sampev = require 'lib.samp.events'

script_name("Cheats")
script_author("Noname")
script_version("1.0")
script_description("Пример использования MoonLoader для работы с SAMP")

local color_white = 0xFFFFFF -- Белый цвет
local color_green = 0x7B68EE -- Зелёный цвет
local color_blue = 0x00BFFF -- Голубой цвет
local script_initialized = false

local mapTexture = nil
local mapPath = getFolderPath(0x14) .. "\\moonloader\\moonloader.png" -- Путь к изображению карты (замените на свой путь)
local mapWidth, mapHeight = 800, 600 -- Размеры изображения карты

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end

    -- Загрузка изображения карты
    mapTexture = loadTexture(mapPath)

    -- Проверка успешной загрузки текстуры карты
    if not mapTexture then
        print("Ошибка загрузки текстуры карты")
        return
    end

    -- Ждем, пока SAMP полностью загрузится
    while not isSampAvailable() do wait(100) end

    -- Вывод информации о скрипте только один раз при запуске
    if not script_initialized then
        sampAddChatMessage("Активация визуального телепорта", color_blue)
        sampAddChatMessage(script.this.name .. ' V' .. script.this.version, color_green)
        script_initialized = true
    end

    -- Регистрация команды /tt для визуального телепорта
    sampRegisterChatCommand("tt", handleVisualTeleportCommand)
end

function handleVisualTeleportCommand(params)
    -- Парсинг параметров команды
    local args = {}
    for arg in params:gmatch("%S+") do
        table.insert(args, arg)
    end

    -- Проверка передачи трёх аргументов: смещение X, Y, Z
    if #args ~= 3 then
        sampAddChatMessage("Использование: /tt [X] [Y] [Z]", color_white)
        return
    end

    -- Преобразование смещения из строк в числа
    local offsetX = tonumber(args[1])
    local offsetY = tonumber(args[2])
    local offsetZ = tonumber(args[3])

    -- Проверка успешного преобразования валидных чисел
    if not offsetX or not offsetY or not offsetZ then
        sampAddChatMessage("Неверные координаты. Использование: /tt [X] [Y] [Z]", color_white)
        return
    end

    -- Телепортация визуально на карте (используя текстуру карты)
    teleportPlayerVisual(offsetX, offsetY)

    -- Вывод сообщения о визуальной телепортации
    sampAddChatMessage(string.format("Вы визуально телепортированы на карту на координаты X:%.2f, Y:%.2f", offsetX, offsetY), color_green)
end

function loadTexture(path)
    -- Загрузка текстуры изображения
    local file = io.open(path, "rb")
    if not file then
        return nil
    end
    local bytes = file:read("*a")
    file:close()

    -- Возвращение массива байтов как текстуры
    return bytes
end

function teleportPlayerVisual(x, y)
    -- Предположим, что x и y уже представляют координаты на изображении карты
    -- Здесь можно добавить логику для отрисовки "игрока" на карте
    -- В примере отправляется команда чата SAMP с сообщением о визуальной телепортации
    local command = string.format("/pm Я телепортировался визуально на карту на координаты X:%.2f, Y:%.2f", x, y)
    sampSendChat(command)
end
 
Последнее редактирование:

Gavayi

Активный
94
26
Кто может склеить эти 2 скрипта.
В одном сбив на Q в другом сбив на R и переворот машины.
Или же подскажите как можно их склеить, чтобы не было проблем и багов при их использовании.
 

Вложения

  • Sbiv(q-durka).cs
    18.2 KB · Просмотры: 4
  • GotovoeCLEO 2in1.cs
    18.5 KB · Просмотры: 5

Gavayi

Активный
94
26
Кто сможет поменять цвет прицела на белый и добавить активацию по чит-коду "cross"
 

Вложения

  • crosshair.cs
    18.9 KB · Просмотры: 3

kalonne

Новичок
3
0
Недавно я переделал скрипт, и теперь я хочу добавить возможность телепортации по метке на карте, но у меня не получается сделать это. Помогите, пожалуйста.
Lua:
require 'lib.moonloader'
local sampev = require 'lib.samp.events'
local inicfg = require 'inicfg'

script_name("VirtualWorld")
script_author("Noname")
script_version("1.0")
script_description("Пример использования MoonLoader для создания виртуального мира с меткой и телепортацией")

local color_white = 0xFFFFFF -- Белый цвет
local color_green = 0x00FF00 -- Зеленый цвет
local color_blue = 0x0000FF -- Синий цвет
local script_initialized = false

local config = {
    virtualWorldActive = false,
    virtualWorldCoords = {0, 0, 0},
    realWorldCoords = {0, 0, 0},
    teleportMarker = {0, 0, 0}
}

local config_file = getWorkingDirectory() .. "\\virtual_world.ini"

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end

    -- Загрузка конфигурации
    if doesFileExist(config_file) then
        config = inicfg.load(config, config_file)
    else
        inicfg.save(config, config_file)
    end

    -- Ждем, пока SAMP полностью загрузится
    while not isSampAvailable() do wait(100) end

    -- Вывод информации о скрипте только один раз при запуске
    if not script_initialized then
        sampAddChatMessage("Активация виртуального мира", color_blue)
        sampAddChatMessage(script.this.name .. ' V' .. script.this.version, color_green)
        script_initialized = true
    end

    -- Регистрация команд для управления виртуальным миром
    sampRegisterChatCommand("vw", handleVirtualWorldCommand)
    sampRegisterChatCommand("teleport", handleTeleportCommand)
    sampRegisterChatCommand("marker", handleShowMarkerCommand)

    while true do
        wait(0)
        if config.virtualWorldActive and isKeyJustPressed(VK_Z) then
            handleSetMarkerCommand()
        end
    end
end

function handleVirtualWorldCommand(params)
    if params:lower() == "on" then
        if config.virtualWorldActive then
            sampAddChatMessage("Виртуальный мир уже активен.", color_white)
            return
        end

        -- Активация виртуального мира
        config.virtualWorldActive = true
        config.realWorldCoords = {getCharCoordinates(PLAYER_PED)}
        config.virtualWorldCoords = {getCharCoordinates(PLAYER_PED)}
        inicfg.save(config, config_file)
        sampAddChatMessage("Виртуальный мир активирован.", color_green)
    elseif params:lower() == "off" then
        if not config.virtualWorldActive then
            sampAddChatMessage("Виртуальный мир не активен.", color_white)
            return
        end

        -- Деактивация виртуального мира
        config.virtualWorldActive = false
        setCharCoordinates(PLAYER_PED, unpack(config.realWorldCoords))
        inicfg.save(config, config_file)
        sampAddChatMessage("Виртуальный мир деактивирован.", color_green)
    else
        sampAddChatMessage("Использование: /vw on/off", color_white)
    end
end

function handleSetMarkerCommand()
    if not config.virtualWorldActive then
        sampAddChatMessage("Установка метки доступна только в виртуальном мире.", color_white)
        return
    end

    -- Получаем координаты курсора на карте
    local cursorX, cursorY = getCursorPos()
    local worldX, worldY, worldZ = convertScreenCoordsToWorld3D(cursorX, cursorY, 1000)

    if worldX and worldY and worldZ then
        config.teleportMarker = {worldX, worldY, worldZ}
        inicfg.save(config, config_file)
        sampAddChatMessage("Метка установлена автоматически.", color_green)
    else
        sampAddChatMessage("Не удалось получить координаты метки.", color_white)
    end
end

function handleTeleportCommand()
    if not config.virtualWorldActive then
        sampAddChatMessage("Телепортация доступна только в виртуальном мире.", color_white)
        return
    end

    if config.teleportMarker[1] == 0 and config.teleportMarker[2] == 0 and config.teleportMarker[3] == 0 then
        sampAddChatMessage("Метка не установлена.", color_white)
        return
    end

    -- Телепортация к метке
    setCharCoordinates(PLAYER_PED, unpack(config.teleportMarker))
    config.virtualWorldCoords = {unpack(config.teleportMarker)}
    sampAddChatMessage(string.format("Вы телепортированы на координаты X:%.2f, Y:%.2f, Z:%.2f", unpack(config.teleportMarker)), color_green)
end

function handleShowMarkerCommand()
    if not config.virtualWorldActive then
        sampAddChatMessage("Просмотр метки доступен только в виртуальном мире.", color_white)
        return
    end

    if config.teleportMarker[1] == 0 and config.teleportMarker[2] == 0 and config.teleportMarker[3] == 0 then
        sampAddChatMessage("Метка не установлена.", color_white)
    else
        sampAddChatMessage(string.format("Метка установлена на координатах X:%.2f, Y:%.2f, Z:%.2f", unpack(config.teleportMarker)), color_blue)
    end
end

function updateVirtualWorld()
    -- Обновляем координаты в виртуальном мире
    local currentCoords = {getCharCoordinates(PLAYER_PED)}
    local velocity = {getCharVelocity(PLAYER_PED)}

    config.virtualWorldCoords[1] = config.virtualWorldCoords[1] + velocity[1]
    config.virtualWorldCoords[2] = config.virtualWorldCoords[2] + velocity[2]
    config.virtualWorldCoords[3] = config.virtualWorldCoords[3] + velocity[3]

    setCharCoordinates(PLAYER_PED, unpack(config.virtualWorldCoords))
end

function sampev.onSendPlayerSync(data)
    if config.virtualWorldActive then
        -- Сервер думает, что вы находитесь в реальном мире
        data.position = {unpack(config.realWorldCoords)}
    end
end

function doesFileExist(file)
    local f = io.open(file, "r")
    if f then
        io.close(f)
        return true
    else
        return false
    end
end