Вопросы по Lua скриптингу

Общая тема для вопросов по разработке скриптов на языке программирования Lua, в частности под MoonLoader.
  • Задавая вопрос, убедитесь, что его нет в списке частых вопросов и что на него ещё не отвечали (воспользуйтесь поиском).
  • Поищите ответ в теме посвященной разработке Lua скриптов в MoonLoader
  • Отвечая, убедитесь, что ваш ответ корректен.
  • Старайтесь как можно точнее выразить мысль, а если проблема связана с кодом, то обязательно прикрепите его к сообщению, используя блок [code=lua]здесь мог бы быть ваш код[/code].
  • Если вопрос связан с MoonLoader-ом первым делом желательно поискать решение на wiki.

Частые вопросы

Как научиться писать скрипты? С чего начать?
Информация - Гайд - Всё о Lua скриптинге для MoonLoader(https://blast.hk/threads/22707/)
Как вывести текст на русском? Вместо русского текста у меня какие-то каракули.
Изменить кодировку файла скрипта на Windows-1251. В Atom: комбинация клавиш Ctrl+Shift+U, в Notepad++: меню Кодировки -> Кодировки -> Кириллица -> Windows-1251.
Как получить транспорт, в котором сидит игрок?
Lua:
local veh = storeCarCharIsInNoSave(PLAYER_PED)
Как получить свой id или id другого игрока?
Lua:
local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
local _, id = sampGetPlayerIdByCharHandle(ped) -- получить ид другого игрока. ped - это хендл персонажа
Как проверить, что строка содержит какой-то текст?
Lua:
if string.find(str, 'текст', 1, true) then
-- строка str содержит "текст"
end
Как эмулировать нажатие игровой клавиши?
Lua:
local game_keys = require 'game.keys' -- где-нибудь в начале скрипта вне функции main

setGameKeyState(game_keys.player.FIREWEAPON, -1) -- будет сэмулировано нажатие клавиши атаки
Все иды клавиш находятся в файле moonloader/lib/game/keys.lua.
Подробнее о функции setGameKeyState здесь: lua - setgamekeystate | BlastHack — DEV_WIKI(https://www.blast.hk/wiki/lua:setgamekeystate)
Как получить id другого игрока, в которого целюсь я?
Lua:
local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
  local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
  if result then -- проверить, прошло ли получение ида успешно
    -- здесь любые действия с полученным идом игрока
  end
end
Как зарегистрировать команду чата SAMP?
Lua:
-- До бесконечного цикла/задержки
sampRegisterChatCommand("mycommand", function (param)
     -- param будет содержать весь текст введенный после команды, чтобы разделить его на аргументы используйте string.match()
    sampAddChatMessage("MyCMD", -1)
end)
Крашит игру при вызове sampSendChat. Как это исправить?
Это происходит из-за бага в SAMPFUNCS, когда производится попытка отправки пакета определенными функциями изнутри события исходящих RPC и пакетов. Исправления для этого бага нет, но есть способ не провоцировать его. Вызов sampSendChat изнутри обработчика исходящих RPC/пакетов нужно обернуть в скриптовый поток с нулевой задержкой:
Lua:
function onSendRpc(id)
  -- крашит:
  -- sampSendChat('Send RPC: ' .. id)

  -- норм:
  lua_thread.create(function()
    wait(0)
    sampSendChat('Send RPC: ' .. id)
  end)
end
 
Последнее редактирование:

Frapsy

Известный
Проверенный
393
226
Можно как-то сделать само-уничтожение файла?
os.remove("путь до файла")

Как сделать чтобы вместо пробелов были "_" или вообще их убрать?
Судя по всему, речь не про пробелы, а переносы строк, верно? Если переносы строк, то "\n" заменяй на ничего и их не будет. А то, что у тебя выбивает ошибку - str = nil.
 

ШPEK

Известный
1,476
525
А как ето сделот?
Lua:
local func = false
local ev = require("samp.events")

function main()
    while not isSampAvailable() do wait(100) end
    while true do
        wait(0)
        if isKeyJustPressed(VK_7) then
             sampForceOnfootSync()
             func = true
        end
    end
end

function ev.onSendPlayerSync(data)
    if func then
        data.keys.клавиша
        func = false
        return false
    end
end

Вот таблица с клавишами
Код:
struct SampKeys {
    uint8_t    primaryFire : 1;
    uint8_t    horn_crouch : 1;
    uint8_t    secondaryFire_shoot : 1;
    uint8_t    accel_zoomOut : 1;
    uint8_t    enterExitCar : 1;
    uint8_t    decel_jump : 1;
    uint8_t    circleRight : 1;
    uint8_t    aim : 1;
    uint8_t    circleLeft : 1;
    uint8_t    landingGear_lookback : 1;
    uint8_t    unknown_walkSlow : 1;
    uint8_t    specialCtrlUp : 1;
    uint8_t    specialCtrlDown : 1;
    uint8_t    specialCtrlLeft : 1;
    uint8_t    specialCtrlRight : 1;
    uint8_t    _unknown : 1;
};
p.s 1 = true
0 = false
 

TadasD

Новичок
15
0
want to have text in 2 colors, but this doesn't work, help pls, ty sampAddChatMessage("FLORIST# ", 0x006400 "rea", 0xF0E68C)
 

Caicyo

Новичок
21
0
Попробуй.
Lua:
local data = {--[[something]]}

function getData()
    return {
        Section = {
            key1 = 1,
            key2 = 2,
        }
    }
end

local z = getData()
for k,v in pairs(z) do data[k] = v end

Lua:
require "lib.moonloader"

local inicfg = require 'inicfg'
local data = inicfg.load({
    MAIN = 
    {
        sSetName=multiplayer, 
        bUpdateSettingsPermanently=0, 
        bCheckForOldPlugin=1, 
        bEnableLog=0, 
        sVersion=0.925
    },
   
    GENERAL = 
    {
        bNextGenRadar=1, 
        bOverlayColor=1, 
        bOverlayBlur=1
    },
   
    CUSTOM_ABILITY = 
    {
        bEnable=0, 
        iValue=0
    },
   
    WIDESCREEN = 
    {
        fOffsetLeft=25.0, 
        fOffsetRight=25.0, 
        fOffsetTop=84.0, 
        fOffsetBottom=35.0
    },
   
    RADAR = 
    {
        fRadarRange=100.0, 
        fRadarRange3D=300.0, 
        fRadarShift=35.0, 
        fRadarShift3D=200.0, 
        iRadar3DAnimTime=500, 
        iRadarSectionAlpha=150, 
        fRadarX=137.0, 
        fRadarY=99.0, 
        fRadarWHalf=112.0, 
        fRadarHHalf=72.0, 
        fNgRadarX=135.5, 
        fNgRadarY=96.5, 
        fNgRadarWHalf=137.5, 
        fNgRadarHHalf=96.5, 
        fNgRadarBorderSize=19.0, 
        fNgRadarBorderSizeForBlips=25.0, 
        fRadarSpriteSize=9.0, 
        fRadarSpriteSizeInMenu=13.0, 
        fRadarPlayerSpriteSize=12.0, 
        RadarRect.fLeft=18.0, 
        RadarRect.fRight=255.0, 
        RadarRect.fTop=189.0, 
        RadarRect.fBottom=9.0, 
        RadarMask.fLeft=0.0, 
        RadarMask.fRight=273.0, 
        RadarMask.fTop=193.0, 
        RadarMask.fBottom=0.0, 
        fLevelBlipBaseSize=5.0, 
        fLevelBlipAdditionalSize=0.5, 
        fLevelBlipBaseSizeInMenu=6.0, 
        fLevelBlipAdditionalSizeInMenu=0.6, 
        RadarDamageRect.fLeft=23.0, 
        RadarDamageRect.fRight=250.0, 
        RadarDamageRect.fTop=171.0, 
        RadarDamageRect.fBottom=27.0, 
        RadarDamageColor.iR=250, 
        RadarDamageColor.iG=0, 
        RadarDamageColor.iB=50, 
        RadarDamageColor.iA=80, 
        iRadarDamageTime=1000, 
        iRadarMapSizeX=256, 
        iRadarMapSizeY=256, 
        fRadarPlaneShift=14.0
    },
   
    RADAR_BAR_P1 = 
    {
        HealthBar.fLeft=23.0, 
        HealthBar.fTop=23.0, 
        HealthBar.fBottom=15.0, 
        HealthBar.fWidth=112.0, 
        ArmorBar.fLeft=138.0, 
        ArmorBar.fTop=23.0, 
        ArmorBar.fBottom=15.0, 
        ArmorBar.fWidth=112.0, 
        BreathBar.fLeft=196.0, 
        BreathBar.fTop=23.0, 
        BreathBar.fBottom=15.0, 
        BreathBar.fWidth=54.0, 
        HealthBarB.fLeft=23.0, 
        HealthBarB.fTop=23.0, 
        HealthBarB.fBottom=15.0, 
        HealthBarB.fWidth=112.0, 
        ArmorBarB.fLeft=138.0, 
        ArmorBarB.fTop=23.0, 
        ArmorBarB.fBottom=15.0, 
        ArmorBarB.fWidth=55.0, 
        BackgroundRect.fLeft=23.0, 
        BackgroundRect.fTop=27.0, 
        BackgroundRect.fRight=250.0, 
        BackgroundRect.fBottom=11.0, 
        BackgroundRect.Color.iR=0, 
        BackgroundRect.Color.iG=0, 
        BackgroundRect.Color.iB=0, 
        BackgroundRect.Color.iA=150
    },
   
    RADAR_BAR_P2 = 
    {
        HealthBar.fLeft=23.0, 
        HealthBar.fTop=183.0, 
        HealthBar.fBottom=175.0, 
        HealthBar.fWidth=112.0, 
        ArmorBar.fLeft=138.0, 
        ArmorBar.fTop=183.0, 
        ArmorBar.fBottom=175.0, 
        ArmorBar.fWidth=112.0, 
        BreathBar.fLeft=196.0, 
        BreathBar.fTop=183.0, 
        BreathBar.fBottom=175.0, 
        BreathBar.fWidth=54.0, 
        HealthBarB.fLeft=23.0, 
        HealthBarB.fTop=183.0, 
        HealthBarB.fBottom=175.0, 
        HealthBarB.fWidth=112.0, 
        ArmorBarB.fLeft=138.0, 
        ArmorBarB.fTop=183.0, 
        ArmorBarB.fBottom=175.0, 
        ArmorBarB.fWidth=55.0, 
        BackgroundRect.fLeft=23.0, 
        BackgroundRect.fTop=187.0, 
        BackgroundRect.fRight=250.0, 
        BackgroundRect.fBottom=171.0, 
        BackgroundRect.Color.iR=0, 
        BackgroundRect.Color.iG=0, 
        BackgroundRect.Color.iB=0, 
        BackgroundRect.Color.iA=150
    },
   
    GPS = 
    {
        fGPSLineSize_OnRadar=5.0, 
        fGPSLineSize_InMenu=9.0, 
        GPSLineColor.iRed=163, 
        GPSLineColor.iGreen=68, 
        GPSLineColor.iBlue=222, 
        GPSLineColor.iAlpha=255, 
        GPSRect.fLeft=24.0, 
        GPSRect.fRight=250.0, 
        GPSRect.fTop=50.0, 
        GPSRect.fBottom=26.0, 
        GPSRectColor.iRed=0, 
        GPSRectColor.iGreen=0, 
        GPSRectColor.iBlue=0, 
        GPSRectColor.iAlpha=170, 
        GPSDistanceText=m, 
        GPSDistanceText1k=km, 
        GPSDistanceTextSize.fHeight=1.1, 
        GPSDistanceTextSize.fWidth=0.6, 
        GPSDistanceTextPosn.fX=245.0, 
        GPSDistanceTextPosn.fY=50.0, 
        GPSNgDistanceTextPosn.fX=47.0, 
        GPSNgDistanceTextPosn.fY=50.0, 
        GPSDistanceTextColor.iRed=255, 
        GPSDistanceTextColor.iGreen=255, 
        GPSDistanceTextColor.iBlue=255, 
        GPSDistanceTextColor.iAlpha=200, 
        GPSPathDirectionTexRect.fLeft=32.0, 
        GPSPathDirectionTexRect.fRight=47.0, 
        GPSPathDirectionTexRect.fTop=48.0, 
        GPSPathDirectionTexRect.fBottom=33.0, 
        fDistToRemoveDestinationBlip=20.0, 
        bShowPathForStaticBlips=0
    },
   
    TIMERS = 
    {
        fBaseY=16.0, 
        fBaseX=20.0, 
        fBarWidth=234.0, 
        fBarHeight=32.0, 
        fBarWithLineHeight=25.0, 
        fBarLineX=9.0, 
        fBarLineY=7.0, 
        fBarLineW=109.0, 
        fBarLineH=10.0, 
        fSpaceBetweenBars=4.0, 
        iBarLineR=100, 
        iBarLineG=180, 
        iBarLineB=222, 
        iBarLineA=255, 
        fBarTextX=6.0, 
        fBarTextY=33.0, 
        fBarTextW=0.8, 
        fBarTextH=1.6, 
        fBarDescrTextX=131.0, 
        fBarDescrTextY=24.0, 
        fBarDescrTextW=0.6, 
        fBarDescrTextH=1.0, 
        fVehicleNameSize=30.0, 
        fPlaceNameSize=30.0
    },
   
    VEHICLE_NAME = 
    {
        fPosnX=20.0, 
        fPosnY=80.0, 
        fScaleX=0.8, 
        fScaleY=1.6, 
        iShadow=1, 
        iShadowSize=2, 
        iStyle=0, 
        iColorR=220, 
        iColorG=220, 
        iColorB=220, 
        iColorA=255
    },
   
    PLACE_NAME = 
    {
        fPosnX=20.0, 
        fPosnY=40.0, 
        fScaleX=0.8, 
        fScaleY=1.6, 
        iShadow=1, 
        iShadowSize=2, 
        iStyle=0, 
        iColorR=220, 
        iColorG=220, 
        iColorB=220, 
        iColorA=255
    },
   
    DEATH_SCREEN = 
    {
        iDisplayTime=3000
    },
   
    PANELS = 
    {
        fTitleTextScaleX=1.0, 
        fTitleTextScaleY=1.8, 
        iTitleFontStyle=1, 
        fTextScaleX=0.5, 
        fTextScaleY=1.1, 
        iFontStyle=1
    },
   
    WEAPON_INFO = 
    {
        bShowDifference=1, 
        fOffsetY=30.0, 
        fLeft=168.0, 
        fRight=18.0, 
        fHeight=150.0, 
        iRectAlpha=150, 
        fTextOffsetY=9.0, 
        fBoxOffsetY=32.0, 
        fSpaceBetweenBars=33.0, 
        fBoxHeight=8.0, 
        fBoxLeft=160.0, 
        fBoxRight=26.0, 
        fTextX=163.0, 
        fTextScaleX=0.6, 
        fTextScaleY=1.1, 
        fTextLineWidth=140.0, 
        iTextOutline=0, 
        iTextFontStyle=2
    },
   
    WEAPON_WHEEL = 
    {
        bComplexSelector=1, 
        iWeaponSwitchDelay=100, 
        iSimpleSelectorTime=500, 
        iSimpleSelectorOpenCloseDelay=2000, 
        bEnableSlowMotion=0, 
        fSlowMotion=1.0
    },
   
    RADIO_WHEEL = 
    {
        bEnableSlowMotion=0, 
        fSlowMotion=1.0, 
        iTimeToDisplayWheel=3000, 
        fRadioIconWidthHalf=48.0, 
        fRadioIconHeightHalf=48.0, 
        fRadioHudPosnY=396.0, 
        RadioIconPosn1.fX=-123.62, 
        RadioIconPosn1.fY=235.53, 
        RadioIconPosn2.fX=-218.91, 
        RadioIconPosn2.fY=151.11, 
        RadioIconPosn3.fX=-264.06, 
        RadioIconPosn3.fY=32.06, 
        RadioIconPosn4.fX=-248.71, 
        RadioIconPosn4.fY=-94.32, 
        RadioIconPosn5.fX=-176.39, 
        RadioIconPosn5.fY=-199.1, 
        RadioIconPosn6.fX=-63.66, 
        RadioIconPosn6.fY=-258.27, 
        RadioIconPosn7.fX=63.66, 
        RadioIconPosn7.fY=-258.27, 
        RadioIconPosn8.fX=176.39, 
        RadioIconPosn8.fY=-199.1, 
        RadioIconPosn9.fX=248.71, 
        RadioIconPosn9.fY=-94.32, 
        RadioIconPosn10.fX=264.06, 
        RadioIconPosn10.fY=32.06, 
        RadioIconPosn11.fX=218.91, 
        RadioIconPosn11.fY=151.11, 
        RadioIconPosn12.fX=123.62, 
        RadioIconPosn12.fY=235.53, 
        RadioIconPosn13.fX=0.0, 
        RadioIconPosn13.fY=266.0, 
        iDefaultIconAlpha=50, 
        iSelectedIconAlpha=255, 
        iSelectCircleAlpha=255, 
        iFontStyle=2, 
        FontScale.fX=0.7, 
        FontScale.fY=1.3, 
        iFontAlignment=0, 
        fFontLineSize=400.0, 
        iFontOutline=1, 
        FontColor.iR=255, 
        FontColor.iG=255, 
        FontColor.iB=255, 
        FontColor.iA=255, 
        fTextPosXMul=0.5, 
        fTextRadioY=332.0, 
        fTextArtistY=365.0, 
        fTextSongY=398.0, 
        fTextSongY2=412.0, 
        bShowOnlyCurrent=1, 
        fTextOffsetY=-75.0, 
        CurrentRadioIconPosn.fX=0.0, 
        CurrentRadioIconPosn.fY=-190.0
    },
   
    WANTED_STARS = 
    {
        bDisplayAlways=0, 
        fStartX=18.0, 
        fStartY=30.0, 
        fSizeX=24.0, 
        fSizeY=24.0, 
        fSpaceSize=20.0, 
        iWhiteStarAlpha=255, 
        iBlackStarAlpha=100
    },
   
    MONEY = 
    {
        bDisplayAlways=1, 
        fStartX=18.0, 
        fStartY=28.0, 
        fSizeX=0.78, 
        fSizeY=1.62, 
        fMoneyChangeY=34.0, 
        iFontStyle=3, 
        iOutline=1, 
        iMoneyTime=5000, 
        iMoneyChangeTime=2500
    },
   
    WEAPON_AMMO = 
    {
        bDisplayAlways=0, 
        fStartX=18.0, 
        fStartY=30.0, 
        fSizeX=0.624, 
        fSizeY=1.296, 
        iFontStyle=3, 
        iOutline=1
    },
   
    CLOCK = 
    {
        bEnableClock=0, 
        bDisplayAlways=0, 
        fStartX=18.0, 
        fStartY=28.0, 
        fSizeX=0.624, 
        fSizeY=1.296, 
        iFontStyle=3, 
        iOutline=1, 
        iClockTime=4000
    },
   
    STATS = 
    {
        bEnableStats=1, 
        fImageLeft=178.0, 
        fImageRight=18.0, 
        fImageTop=170.0, 
        fImageBottom=10.0, 
        fRectLeft=177.0, 
        fRectRight=17.0, 
        fRectTop=438.0, 
        fRectBottom=176.0, 
        RectColor.iR=0, 
        RectColor.iG=0, 
        RectColor.iB=0, 
        RectColor.iA=150, 
        fTextStartX=11.0, 
        fTextStartY=5.0, 
        fTextSpaceY=36.0, 
        fTextScaleX=0.55, 
        fTextScaleY=1.0, 
        iTextOutline=0, 
        iTextFontStyle=1, 
        iTextColorR=255, 
        iTextColorG=255, 
        iTextColorB=255, 
        iTextColorA=200, 
        Line.fStartX=11.0, 
        Line.fStartY=29.0, 
        Line.fWidth=135.0, 
        Line.fHeight=7.0, 
        Line.fSpaceY=36.0, 
        Line.Color1.iR=100, 
        Line.Color1.iG=170, 
        Line.Color1.iB=190, 
        Line.Color1.iA=100, 
        Line.Color2.iR=100, 
        Line.Color2.iG=170, 
        Line.Color2.iB=190, 
        Line.Color2.iA=255
    },
   
    SUBTITLES = 
    {
        Color.iR=225, 
        Color.iG=225, 
        Color.iB=225, 
        Color.iA=255, 
        iShadow=1, 
        iShadowSize=1, 
        iFontStyle=1, 
        fXPropotion=0.5, 
        fYPosn=30.0, 
        fYPosnInCutscene=30.0, 
        fScaleX=0.86, 
        fScaleY=1.62, 
        fLineSize=500.0, 
        fLineSizeInCutscene=250.0, 
        ShadowColor.iR=0, 
        ShadowColor.iG=0, 
        ShadowColor.iB=0, 
        ShadowColor.iA=255
    },
   
    HELP_BOX = 
    {
       
    },
   
    TRIP_SKIP = 
    {
        Rect.fTop=41.0, 
        Rect.fBottom=5.0, 
        Rect.fLeft=0.0, 
        Rect.fRight=0.0, 
        IconRect.fTop=-8.0, 
        IconRect.fBottom=0.0, 
        IconRect.fLeft=10.0, 
        IconRect.fRight=42.0, 
        iRectAlpha=180, 
        fTextScaleX=0.5, 
        fTextScaleY=1.0, 
        fTextX=54.0, 
        fTextY=12.0, 
        iTextOutline=0, 
        iTextFontStyle=1
    },
   
    SUCCESS_FAILED = 
    {
        fLineWidth=1000.0
    },
   
    MP_WEAPON_HUD = 
    {
        bShowWeaponName=1, 
        bShowWeaponStats=0, 
        iLineColorR=47, 
        iLineColorG=111, 
        iLineColorB=183, 
        iLineColorA=255
    }
}, getGameDirectory() .. '\\GTAVHud_by_DK22Pac\\mp\\V_HUD_by_DK22Pac.ini')

function main()
    while true do
        wait(0)
        if isCharInAnyCar(playerPed) then
            playercar = storeCarCharIsInNoSave(playerPed)
            carhp = getCarHealth(playercar)
            data.CUSTOM_ABILITY.bEnable = 1
            data.CUSTOM_ABILITY.iValue = carhp
            inicfg.save(data, getGameDirectory() .. '\\GTAVHud_by_DK22Pac\\mp\\V_HUD_by_DK22Pac.ini')
        else
            data.CUSTOM_ABILITY.bEnable = 0
            data.CUSTOM_ABILITY.iValue = 0
            inicfg.save(data, getGameDirectory() .. '\\GTAVHud_by_DK22Pac\\mp\\V_HUD_by_DK22Pac.ini')
        end
    end
end
Тут мягко говоря описан весь ini файл. И это полнейший маразм.
В итоге ловлю в логе ошибку:
C:\GTA San Andreas\moonloader\test.lua:56: '}' expected (to close '{' at line 36) near '='
Никаких проблем с кавычками нет, скрипт почему то хочет закрыть секцию RADAR раньше чем она заканчивается на самом деле. Посчитав строки есть предположение что inicfg видимо не может схендлить больше 37 ключей в одной секции. Странное число.
 

Akionka

akionka.lua
Проверенный
742
500
Lua:
function fakePressN()
    local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    local data = allocateMemory(68)
    sampStorePlayerOnfootData(id, data)
    setStructElement(data, 36, 1, 128, false)
    sampSendOnfootData(data)
    freeMemory(data)
end
Че значит 128? И как его нашли? Мне такое же, но для фэйк нажатия Y нужно. Помогите ПЖ!!
 

Musaigen

abobusnik
Проверенный
1,586
1,315
Код:
bad argument #1 to 'gsub' (string expected, got nil)
stack traceback:
    [C]: in function 'gsub'
    ...es\GTA San Andreas MultiPlayer\moonloader\bbotforyou.lua: in function 'callback'
    ... Andreas MultiPlayer\moonloader\lib\samp\events\core.lua: in function <... Andreas MultiPlayer\moonloader\lib\samp\events\core.lua:54>
строку укажи
 

Psevdonim

Новичок
22
0
Какая функция нужна, чтобы я смог сокращать команды. Пример: из /inventory - сделать /inv
 

Caicyo

Новичок
21
0
Какая функция нужна, чтобы я смог сокращать команды. Пример: из /inventory - сделать /inv
bool result = sampRegisterChatCommand(string cmd, function func)

Костыль конечно, регаешь кастомную команду а в ее функции вешаешь отправку стандартной команды. Типа того:
Lua:
function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  while not isSampAvailable() wait(100) end
  sampRegisterChatCommand("/inv", inv)
  wait(-1)
end

function inv()
 sampSendChat("/inventory")
end
 

ШPEK

Известный
1,476
525
Какая функция нужна, чтобы я смог сокращать команды. Пример: из /inventory - сделать /inv
Нет такой, сокращай сам

bool result = sampRegisterChatCommand(string cmd, function func)

Костыль конечно, регаешь кастомную команду а в ее функции вешаешь отправку стандартной команды. Типа того:
Lua:
function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  while not isSampAvailable() wait(100) end
  sampRegisterChatCommand("/inv", inv)
  wait(-1)
end

function inv()
 sampSendChat("/inventory")
end
sampRegisterChatCommand("/inv", function() sampSendChat("/inventory") end)
 

Terratomorf

Известный
315
58
Есть стены и мне нужна колизия на них, скачал nocols включаю колизию объектов и он падает под землю так как пол не обычный а тоже как стена в чём смысл бля? Нужно чтоб он проходил только сквозь стены которые передо мной и не падал через пол
 
  • Нравится
Реакции: Fikerlosg

Caicyo

Новичок
21
0
Есть стены и мне нужна колизия на них, скачал nocols включаю колизию объектов и он падает под землю так как пол не обычный а тоже как стена в чём смысл бля? Нужно чтоб он проходил только сквозь стены которые передо мной и не падал через пол
Темой ошибся, тут помогают с программным кодом, а не пишут скрипты на заказ или занимаются их поиском по запросу.